From 892c6f853b0f6d1f38495650da6f1de23eba7906 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Wed, 5 Aug 2020 14:03:08 +0300 Subject: [PATCH 01/25] docs: add note on how to reset Clover package using git (ru, en) --- docs/en/cli.md | 10 ++++++++++ docs/ru/cli.md | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/docs/en/cli.md b/docs/en/cli.md index 37c64994..6f634f10 100644 --- a/docs/en/cli.md +++ b/docs/en/cli.md @@ -78,3 +78,13 @@ You can use **nano** to edit files on the Raspberry Pi. It is one of the more us ``` You may also use other editors like **vim** if you prefer. + +## Resetting changes + +For resetting all the changes in Clover package related files (`launch`-files), use git: + +```bash +cd ~/catkin_ws/src/clover +git checkout . +sudo systemctl restart clover +``` diff --git a/docs/ru/cli.md b/docs/ru/cli.md index 567ad8be..d8c80196 100644 --- a/docs/ru/cli.md +++ b/docs/ru/cli.md @@ -78,3 +78,13 @@ sudo reboot ``` Для редактирования файлов также можно использовать и другие редакторы, например, **vim**. + +## Сброс изменений + +Для сброса изменений всех файлов, относящихся к пакету Клевера (`launch`-файлы) используйте git: + +```bash +cd ~/catkin_ws/src/clover +git checkout . +sudo systemctl restart clover +``` From 768c0be5a54f5ec939ef22cc562e448d7af98214 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Thu, 6 Aug 2020 14:56:49 +0300 Subject: [PATCH 02/25] Change running section in clover's readme --- clover/README.md | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/clover/README.md b/clover/README.md index 3ba187e3..5cb1f2a1 100644 --- a/clover/README.md +++ b/clover/README.md @@ -44,13 +44,6 @@ Alternatively you may change the `fcu_url` property in `mavros.launch` file to p ## Running -Enable systemd service `roscore` (if not running): - -```bash -sudo systemctl enable /home//catkin_ws/src/clover/builder/assets/roscore.service -sudo systemctl start roscore -``` - To start connection to SITL, use: ```bash @@ -68,6 +61,8 @@ roslaunch clover clover.launch Also, you can enable and start the systemd service: ```bash -sudo systemctl enable /home//catkin_ws/src/clover/deploy/clover.service +sudo systemctl enable /home//catkin_ws/src/clover/builder/assets/clover.service sudo systemctl start clover ``` + +Note, that it's intended for Raspbian OS, so it uses `pi` username by default. From 6b5e3464f1d082247255c1e27729072d9fb47c22 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Thu, 6 Aug 2020 15:24:44 +0300 Subject: [PATCH 03/25] Remove info clover.service as it's only for Raspbian --- clover/README.md | 9 --------- 1 file changed, 9 deletions(-) diff --git a/clover/README.md b/clover/README.md index 5cb1f2a1..35c3fafc 100644 --- a/clover/README.md +++ b/clover/README.md @@ -57,12 +57,3 @@ roslaunch clover clover.launch ``` > Note that the package is configured to connect to `/dev/px4fmu` by default (see [previous section](#manual-installation)). Install udev rules or specify path to your FCU device in `mavros.launch`. - -Also, you can enable and start the systemd service: - -```bash -sudo systemctl enable /home//catkin_ws/src/clover/builder/assets/clover.service -sudo systemctl start clover -``` - -Note, that it's intended for Raspbian OS, so it uses `pi` username by default. From e94e552da31d140e1c58baa8a71b800a86532c20 Mon Sep 17 00:00:00 2001 From: Alexey Rogachevskiy Date: Mon, 10 Aug 2020 13:47:17 +0300 Subject: [PATCH 04/25] travis: Show compressed image size Squashed commit of the following: commit 3460fec25e7c7ce9a7068be29b6ca65144cf9a3d Author: Alexey Rogachevskiy Date: Mon Aug 10 00:19:05 2020 +0300 travis: Use short commit notation commit fa44e4b42fd4e330be511ad5101019178c044007 Author: Alexey Rogachevskiy Date: Sun Aug 9 01:00:56 2020 +0300 travis: Fix IMAGE_VERSION initialization commit 4bc985a7f479e7d1b51fc45cf5699490a7dcf05b Author: Alexey Rogachevskiy Date: Sat Aug 8 21:26:06 2020 +0300 travis: Generate zip file after successful build commit c2bfa07a36cc0ddcec19584245180ae3846334ae Author: Alexey Rogachevskiy Date: Fri Aug 7 17:36:56 2020 +0300 travis: Fix parsing errors commit 6ba27ef15db2789d1696af358668df5a7c4b7173 Author: Alexey Rogachevskiy Date: Fri Aug 7 17:28:48 2020 +0300 travis: Output compressed image size --- .travis.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.travis.yml b/.travis.yml index 72deb67f..6094f267 100644 --- a/.travis.yml +++ b/.travis.yml @@ -7,7 +7,7 @@ env: global: - DOCKER="sfalexrog/img-tool:qemu-update" - TARGET_REPO="https://github.com/${TRAVIS_REPO_SLUG}.git" - - if [[ -z ${TRAVIS_TAG} ]]; then IMAGE_VERSION="${TRAVIS_COMMIT}}"; else IMAGE_VERSION="${TRAVIS_TAG}"; fi + - IMAGE_VERSION=${TRAVIS_TAG:-${TRAVIS_COMMIT:0:7}} - IMAGE_NAME="$(basename -s '.git' ${TARGET_REPO})_${IMAGE_VERSION}.img" git: depth: 50 @@ -36,12 +36,13 @@ jobs: fi before_cache: - cp images/*.zip imgcache + after_success: + - sudo chmod -R 777 * + - cd images && zip ${IMAGE_NAME}.zip ${IMAGE_NAME} && stat --printf="Compressed image size:%s\n" ${IMAGE_NAME}.zip before_deploy: # Set up git user name and tag this commit - git config --local user.name "goldarte" - git config --local user.email "goldartt@gmail.com" - - sudo chmod -R 777 * - - cd images && zip ${IMAGE_NAME}.zip ${IMAGE_NAME} deploy: provider: releases token: ${GITHUB_OAUTH_TOKEN} From c0f15fc1e69ea1a1f18dc031e5204a2ad560c100 Mon Sep 17 00:00:00 2001 From: Alexey Rogachevskiy Date: Tue, 11 Aug 2020 23:26:58 +0300 Subject: [PATCH 05/25] clover.world: Shift parquet_plane down This will make placing thin objects easier. --- clover_simulation/resources/worlds/clover.world | 1 + 1 file changed, 1 insertion(+) diff --git a/clover_simulation/resources/worlds/clover.world b/clover_simulation/resources/worlds/clover.world index 5d8da26a..7715cdc2 100644 --- a/clover_simulation/resources/worlds/clover.world +++ b/clover_simulation/resources/worlds/clover.world @@ -7,6 +7,7 @@ model://parquet_plane + 0 0 -0.01 0 0 0 From acfb858598994c44fe8b0bc3f3ac3a70dfcfe26a Mon Sep 17 00:00:00 2001 From: Alamoris Date: Wed, 12 Aug 2020 04:45:45 +0300 Subject: [PATCH 06/25] docs: add section about manual flight (#267) * docs: Add article about flight * docs: add flight lessons * Update docs/ru/flight.md Co-authored-by: Alexey Rogachevskiy * Update docs/ru/flight.md Co-authored-by: Alexey Rogachevskiy * Update docs/ru/flight.md Co-authored-by: Alexey Rogachevskiy * Update docs/ru/flight.md Co-authored-by: Alexey Rogachevskiy * Update docs/ru/flight.md Co-authored-by: Alexey Rogachevskiy * Update docs/ru/flight.md Co-authored-by: Alexey Rogachevskiy * Update docs/ru/flight.md Co-authored-by: Alexey Rogachevskiy * docs: Updates * Edit flight article * Move flight exercises to separate article * sfalexrog edits * docs: add exercise * docs: update exercises * docs: Some fixes * Edit flight exercises article * docs: Resize and change images * Reduce images sizes more Co-authored-by: Alexey Rogachevskiy Co-authored-by: Oleg Kalachev --- .../flight/basic_movements_multicopter.svg | 3865 +++++++++++++++++ docs/assets/flight/buzzer.jpg | Bin 0 -> 23775 bytes docs/assets/flight/buzzer_acb.jpg | Bin 0 -> 68815 bytes docs/assets/flight/buzzer_connection.jpg | Bin 0 -> 33885 bytes docs/assets/flight/controller_arm.jpg | Bin 0 -> 84192 bytes docs/assets/flight/rc_basic_commands.svg | 569 +++ docs/ru/SUMMARY.md | 3 + docs/ru/flight.md | 106 + docs/ru/flight_exercises.md | 152 + 9 files changed, 4695 insertions(+) create mode 100644 docs/assets/flight/basic_movements_multicopter.svg create mode 100644 docs/assets/flight/buzzer.jpg create mode 100644 docs/assets/flight/buzzer_acb.jpg create mode 100644 docs/assets/flight/buzzer_connection.jpg create mode 100644 docs/assets/flight/controller_arm.jpg create mode 100644 docs/assets/flight/rc_basic_commands.svg create mode 100644 docs/ru/flight.md create mode 100644 docs/ru/flight_exercises.md diff --git a/docs/assets/flight/basic_movements_multicopter.svg b/docs/assets/flight/basic_movements_multicopter.svg new file mode 100644 index 00000000..d85d0aff --- /dev/null +++ b/docs/assets/flight/basic_movements_multicopter.svg @@ -0,0 +1,3865 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/assets/flight/buzzer.jpg b/docs/assets/flight/buzzer.jpg new file mode 100644 index 0000000000000000000000000000000000000000..877190b91a1478ad1fa5d5125be3e354366ac84c GIT binary patch literal 23775 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 z%0A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 DPnr!+ literal 0 HcmV?d00001 diff --git a/docs/assets/flight/buzzer_acb.jpg b/docs/assets/flight/buzzer_acb.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c095bc251c659e6266851c64e4ce8a502d6fc7a4 GIT binary patch literal 68815 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

`{YS9vV-&nj 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 F`Y)GzuBHG0 literal 0 HcmV?d00001 diff --git a/docs/assets/flight/buzzer_connection.jpg b/docs/assets/flight/buzzer_connection.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9f168d7fbe359b4e35433438a85cc4d60d683c8b GIT binary patch literal 33885 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 SvD@qu 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 literal 0 HcmV?d00001 diff --git a/docs/assets/flight/rc_basic_commands.svg b/docs/assets/flight/rc_basic_commands.svg new file mode 100644 index 00000000..84a0e5d2 --- /dev/null +++ b/docs/assets/flight/rc_basic_commands.svg @@ -0,0 +1,569 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/ru/SUMMARY.md b/docs/ru/SUMMARY.md index a7b15192..73dc3749 100644 --- a/docs/ru/SUMMARY.md +++ b/docs/ru/SUMMARY.md @@ -17,6 +17,9 @@ * [Полетные режимы](modes.md) * [Настройка питания](power.md) * [Настройка failsafe](failsafe.md) +* Ручной полет + * [Основы](flight.md) + * [Упражнения](flight_exercises.md) * Работа с Raspberry Pi * [Raspberry Pi](raspberry.md) * [Образ для RPi](image.md) diff --git a/docs/ru/flight.md b/docs/ru/flight.md new file mode 100644 index 00000000..1249517a --- /dev/null +++ b/docs/ru/flight.md @@ -0,0 +1,106 @@ +# Полет + +Этот раздел объясняет основы управление квадрокоптером с использование пульта радиоуправления в различных режимах (для автономных полетов смотрите раздел "[Программирование](programming.md)"). + +## Радиоаппаратура и ее команды + +Прежде чем запускать ваш коптер, необходимо разобраться, как работает пульт радиоуправления ("аппаратура" в общепринятой терминологии авиамоделизма). + +Управление дроном происходит с помощью двух стиков на аппаратуре. По умолчанию левый стик отвечает за газ и рысканье, а правый за крен и тангаж. Данные термины используются для всех летательных судов, от самолетов до квадрокоптеров. + + + +* Газ (*throttle*) – отвечает за скорость вращения двигателей. +* Рысканье (*yaw*) – отвечает за повороты вокруг вертикальной оси (Z), по часовой (при наклоне вправо) и против часовой (при наклоне влево) стрелки. +* Тангаж (*pitch*) – отвечает за наклон или движение вперёд/назад. +* Крен (*roll*) – отвечает за наклон или движение влево/вправо. + +Данные описания предполагают, что коптер находится задней частью к пилоту. + + + +## Полетные режимы + +Ручное полет с использованием полетного контроллера PX4 может происходит с использованием разных полетных режимов, которые определяют назначения стиков радиопульта и другие характеристики полета. Полный список полетных режимов приведен в статье "[Полетные режимы](modes.md)". + +Основные ручные режимы разобраны далее. + +**STABILIZED** - режим стабилизации горизонтального положения. В данном режиме коптер будет удерживать горизонт, если им не управлять. Назначение стиков: + +* Газ – усредненная скорость вращения моторов. +* Рысканье – угловая скорость вокруг вертикальной оси. +* Тангаж – угол наклона вокруг поперечной оси (вперед/назад). +* Крен – угол наклон вокруг продольной оси (влево/вправо). + +**POSCTL** – режим удержания позиции (требуется включенная система позиционирования). Назначение стиков: + +* Газ - вертикальная скорость полета. +* Рысканье - угловая скорость вокруг вертикальной оси. +* Тангаж - линейная скорость полета дрона (вперед/назад). +* Крен - линейная скорость полета дрона (влево/вправо). + +**ACRO** – режим управление средней скоростью вращения моторов и угловыми скоростями дрона. Этот режим является наиболее сложным для пилотирования и чаще всего применяется дрон-рейсерами и в шоу 3D-пилотирования для выполнения трюков. Назначение стиков: + +* Газ – усредненная скорость вращения моторов. +* Рысканье – угловая скорость вокруг вертикальной оси. +* Тангаж – угловая скорость вокруг поперечной оси (вперед/назад). +* Крен – угловая скорость вокруг продольной оси (влево/вправо). + +> **Info** В других полетных контроллерах аналогичные полетные режимы могут называться по-другому. + +## Подготовка к полету + +### Установка пропеллеров и АКБ + +1. Установите ремешок для аккумулятора. + + + +2. Установите пропеллеры в соответствии со [схемой направления движения моторов](#prop_rotation). + + + +3. Закрепите пищалку и установите аккумулятор. + +

+ +### Настройка пищалки + +Для того, чтобы не переразрядить и не испортить аккумулятор, рекомендуется использовать индикатор напряжения(*пищалка*). + +Для настройки *пищалки* подключите ее к балансировочному разъему вашего аккумулятора. Теперь, нажимая на кнопку в основании будет изменяться минимальное напряжение на ячейках. Оптимальное значение минимального напряжения является *3.5-3.6 V*. + +
+ + +
+ +### Состояния готовности к полету + +Прежде чем начинать полет, необходимо перевести коптер в состояние *Armed*. + +* Состояние *Armed* – раскручивает моторы на минимальных оборотах, коптер готов к полету. +* Состояние *Disarmed* – моторы не работают, коптер не передает сигналы с пульта на них. + +По умолчанию коптер находится в состоянии *Disarmed* и переходит в него в случае если вы долго не взлетаете. + +Для перевода коптера в состояние *Armed* есть несколько способов: + +* С помощью стика – переведите левый стик вниз вправо и подождите пару секунд. +* С помощью тумблера – состояния Armed/Disarmed можно настроить на один из тумблеров. Подробнее о настройке в смотрите в статье про [полетные режимы](modes.md). +* С помощью QGC – вы можете заармить ваш дрон программно. Для этого нажмите на надпись *Disarm* в шапке и выберите другое состояние. + + + +### Kill switch + +При активации тумблера *Kill Switch* на моторы перестают посылаться сигналы управления, и моторы перестают вращаться. Эта функция используется в крайних случаях, к примеру, если вы потеряли управление над коптером. + +> **Caution** Будьте внимательны, *Kill Switch* не переводит коптер в состояние *Disarmed*! + +Каждый раз перед отключением *Kill Switch* убеждайтесь, что стик газа находится в нижнем положении и коптер находится в состоянии *Disarmed*. В случае, если стик газа не находится в нижнем положении, при отключении *Kill Switch* на моторы будет подан сигнал соответствующий положению стика в данный момент, что приведет к резкому рывку коптера. + +**Далее**: [Упражнения для управления коптером](flight_exercises.md). diff --git a/docs/ru/flight_exercises.md b/docs/ru/flight_exercises.md new file mode 100644 index 00000000..90992bae --- /dev/null +++ b/docs/ru/flight_exercises.md @@ -0,0 +1,152 @@ +# Упражнения для управления коптером + +Далее описаны рекомендуемые упражнения для тех, кто учится летать на коптере в первый раз. Повторяйте каждое упражнение необходимое количество раз, пока не будете чувствовать себя уверенно в нем. + +> **Hint** В случае, если рядом есть человек умеющий управлять коптером, используйте [режим тренера](trainer_mode.md). + + + +> **Hint** Настоятельно рекомендуется первые полеты проводить за защитной сеткой. В случае отсутствия таковой, полетная зона должна быть не менее 6x6 м. + +## Включение, выключение моторов, изменение режимов + +> **Hint** Для удобства подключитесь к коптеру с помощью [QGC через Wi-Fi](gcs_bridge.md) и включите звук. Это позволит наблюдать за изменением полетных режимов. Если не имеется возможности подключиться через Wi-Fi, для проверки полетных режимов подключитесь по USB. + +Убедитесь, что настроили полетные режимы на один из тумблеров. Для этого переключите тумблер, в разные позиции и убедитесь, что режимы изменяются. + +Рекомендуется настроить *Kill Switch*, для его проверки совершите следующие действия: + +* Включите *Kill Switch*, проверьте, что в QGC появилось соответствующее уведомление. +* Переведите коптер в состояние *Armed*, а затем включите *Kill Switch*. Убедитесь, что моторы выключились. Затем переключите тумблер *Kill Switch* в изначальное положение. Если коптер автоматически не перешел в состояние *Disarmed* из-за бездействия, моторы снова начнут вращаться. + +> **Caution** Переводдите коптер в состояние *Armed* только на полетной зоне. + +Убедитесь, что режимы переключаются удобными для вас тумблерами. В противном случае измените их в соответствии со [статьей по настройке полетных режимов](modes.md). Повторите приведенные действия несколько раз, для того, чтобы запомнить какие тумблеры за что отвечают. + +## Работа с газом + +Первым делом необходимо почувствовать отзывчивость коптера на движение стика газа и научиться им управлять. Каждый коптер имеет немного различные запасы мощности и соответственно отрывается от земли при разных положениях стика. + +В данном упражнении необходимо использовать только стик газа. Во время выполнения рекомендуется не использовать остальные стики. + +Основные задания упражнения: + +1. Дрейф коптера по земле, без взлета в воздух. +2. Дрейф коптера с "подпрыгиваниями". +3. Дрейф коптера и последующий переход к подпрыгиваниям. + +### Предполетные проверки + +Перед взлетом выполняйте следующие действия: + +1. Проверьте целостность коптера и возможность вращения пропеллеров. +2. Убедитесь, что коптер находится задней частью к вам. +3. Включите коптер путем подключения АКБ. +4. Отойдите на безопасное расстояние. Рекомендуется соблюдать расстояние до коптера минимум 4–5 м. +5. Убедитесь, что коптер находится в режиме *Stabilized*. +6. Переведите коптер в состояние *Armed*. + +Не пытайтесь сразу оторвать коптер от земли, найдите минимально возможное положение стика в соответствии с упражнением. В противном случае это может привести к поломкам или травмам. + +> **Caution** В случае потери контроля над коптером необходимо сразу включать *Kill Switch*. Настоятельно рекомендуется проверять его работу перед каждым взлетом, для наработки мышечной памяти. + +**Упражнение №1**. Медленно поднимайте стик газа вверх, пока коптер не начнет двигаться. В этот момент он начнет медленно дрейфовать по земле. Оставьте стик газа в таком положении и подождите пару секунд, затем переведите стик в изначальное положение, чтобы посадить коптер. После посадки коптера выключите моторы переведя в состояние *Disarmed*. Повторите упражнение 10–15 раз, чтобы лучше чувствовать отзывчивость коптера на стик газа. + +**Упражнение №2**. Как и в прошлом упражнении, медленно поднимайте стик газа вверх, пока коптер на начнет двигаться по земле. Продолжайте увеличивать газ, пока коптер не начнет немного подлетать, это похоже на небольшие "подпрыгивания". Оставьте стик газа в таком положении и подождите пару секунд, затем посадите коптер аналогично упражнению №1. Повторите упражнение 10-15 раз. + +**Упражнение №2**. Упражнение является совмещением первого и второго. Аналогично с первым упражнением поднимайте стик газа, пока коптер не начнет дрейфовать по земле, подождите секунду и продолжайте его увеличивать до "подпрыгиваний" коптера, снова подождите пару секунд, посадите коптер. Для закрепления повторяйте упражнения 10-15 раз, при необходимости увеличивая количество повторений. + +## Работа с креном и тангажом + +После освоения управления газом коптера, необходимо научиться управлять его горизонтальным положением. За это отвечает правый стик на радоаппаратуре. + +Управление данными осями интуитивно понятно: + +* Стик наклонен вперед (вверх) – коптер движется вперед. +* Стик наклонен назад (вниз) – коптер движется назад. +* Стик наклонен вправо – коптер движется вправо. +* Стик наклонен влево – коптер движется влево. + +Чем сильнее стик будет наклонен в сторону, тем быстрее коптер будет двигаться. + +Основные задания упражнения: + +1. Полет по оси X, вперед/назад. +2. Полет по оси Y, влево/вправо. +3. Стабилизация коптера на одном месте. +4. Полет по квадрату по часовой стреле и против. + +> **Hint** Старайтесь всегда находится позади коптера, таким образом, чтобы его задняя часть была направлена к вам, иначе вы можете потерять управление над ним, перепутав стороны. + +Как и в случае с управлением газом, перед полетом выполняйте [следующие действия](#предполетные-проверки). + +> **Hint** Если коптер сильно вращается вокруг своей оси, посадите его и повторно откалибруйте магнитометр и гироскоп. + +**Упражнение №1**. Аналогично упражнениям по управлению газом поднимайте стик газа, пока коптер на начнет дрейфовать по земле или немного подпрыгивать, затем отпустите стик газа, оставив его в таком положении, и поднимайте стик тангажа, сначала вверх, на протяжении секунды, затем вниз. При этом коптер будет постепенно перемещаться сначала от вас, а затем к вам. Повторите упражнение 5-10 раз, пока не почувствуете отзывчивость коптера на движение стика. + +**Упражнение №2**. Поднимайте стик газа, пока коптер не начнет дрейфовать, затем оставьте его и перемещайте стик крена сначала вправо, на протяжении секунды, затем влево. При этом коптер будет постепенно перемещаться сначала вправо, а затем влево. Повторите упражнение 5-10 раз, пока не почувствуете отзывчивость коптера на движение стика. + +**Упражнение №3**. Поднимайте стик газа, пока коптер не начнет дрейфовать, затем оставьте его. Совместите первое и второе упражнение и постарайтесь стабилизировать коптер в одной точке, компенсируя его дрейф с помощью стика. Удерживайте коптер 50-60 секунд. + +**Упражнение №4**. Поднимайте стик газа, пока коптер не начнет дрейфовать, затем оставьте его. Почувствовав отзывчивость коптера на изменения стиков выполните фигуру "квадрат" со стороной 1 м, сначала по часовой стрелке, а затем против. Выполняйте фигуры по 2-3 раза. + +### Воздушная подушка и управление в ней + +Понятие *воздушной подушки* очень важно во всей летательной технике. Сама по себе воздушная подушка является зоной повышенного давления, возникающая за счет воздуха пропускаемого через пропеллеры. Данная область харрактеризуется турбелентностями и воздушными потоками влияющими на полет коптера. + +Пилоты стараются избегать полетов в воздушной подушке, но на ее границе имеется стабильная область, в которой коптер может зависнуть при минимальном значении газа. В таком случае создается ощущение, что коптер "сел" на воздушную подушку. + +Главная особенность и приемущество такого полета заключается в том, что коптер не будет изменять высоту при одном значении газа. + +Основные задания: + +1. Стабилизация коптера на одном месте. +2. Полет по квадрату. +3. Полет по кругу. + +Аналогично с предыдущими упражнениями перед взлетом выполните [следующие действия](#предполетные-проверки). + +**Упражнение №1**. Поднимайте стик газа, пока коптер не пролетит воздушную подушку и не окажется над ней (высота от пола ~25-30 см, для коптера Клевер 4). Коптер не должен подниматься вверх или проваливаться вниз, высота полета должа стабилизироваться, при этом коптер может покачаваться вверх, вниз с амплитудой 5-7 см. Как и в предыдущем упражнении корректируйте позицию коптера по осям X, Y с помощью стика крена и тангажа. В результате коптер должен зависнуть в одной точке с небольшими покачиваниями по сторонам. Удерживайте коптер 30-40 секунд. + +**Упражнение №2**. Поднимите коптер на воздушную подушку и стабилизируйте его в одной точке. Далее пролетите по квадрату со стороной 1 м сначала по часовой стрелке, потом против часовой стрели. Повторите траекторию в каждую сторону 2-3 раза. + +**Упражнение №3**. Поднимите коптер на воздушную подушку и стабилизируйте его в одной точке. Попробуйте описать коптером круг с диаметром 1 м, по часовой и против часовой стрелки. Повторите траекторию в каждую сторону 2-3 раза. + +### Работа с рысканьем + +При визуальном управлении мультикоптерными устройствами, рысканье не играет на столько важной роли, как с самолетной технике, поскольку коптер может передвигаться в любую сторону вне зависимости от того, куда он направлен. + +> **Info** Термин *рысканье* (*yaw*) обозначает поворот коптера вокруг вертикальной оси. + +Основные задания: + +1. Оборот коптера вокруг себя, ориентируя заднюю часть коптера к себе. +2. Оборот вокруг коптера, ориентируя заднюю часть к себе + +Для выполнения представленных упражнений рекомендуется найти большое свободное пространство. + +Аналогично с предыдущими упражнениями перед взлетом выполните [предполетные проверки](#предполетные-проверки). + +**Упражнение №1**. Поднимите коптер на воздушную подушку и стабилизируйте его в одной точке. Описывайте коптером круг вокруг себя, на расстоянии 2-3 м, при этом поворачивая его таким образом, чтобы задняя часть коптера всегда была направлен на вас. Выполняйте упражнение по часовой стрелке и против. Повторите упражнение 4-5 раз. + +**Упражнение №2**. Поднимите коптер на воздушную подушку и стабилизируйте его в одной точке. Обойдите коптер вокруг, при этом поворачивая его таким образом, чтобы задяя часть была направлена на вас. Обходите коптер по часовой стрелке и против. Повторите упражнение 4-5 раз. + +> **Caution** Дополнительные упражнения значительно сложнее обычных и не обязательны к выполнению. Приступайте к ним, только если вы уже уверенно управляете коптером. + +**Дополнительное упражнение №1**. Поднимите коптер на воздушную подушку и стабилизируйте его в одной точке. Выполняйте полет таким образом, чтобы передняя часть коптера всегда смотрела в сторону его движения. + +**Дополнительное упражнение №2**. Поднимите коптер на воздушную подушку и стабилизируйте его в одной точке. Разверните коптер передней частью к себе и пробуйте управлять им задом наперед. + +### Свободный полет + +Если вы можете выполнить каждое из описанных выше упражнений, скорее всего, вы уже умеете свободно взлетать и управлять коптером. Далее будут представленны некоторые упражнения для закрепления полученных навыков. + +Упражнения: + +* Полет по вертикальному квадрату. +* Полет по граням куба. +* Полет по вертикальному кругу. +* Полет по восьмерке. +* Подъем коптера по спирали. + +Закрепляйте полученные навыки необходимое для вас количество раз. From 4f0a099152fc6a2ead15a0850229a3458e324ad4 Mon Sep 17 00:00:00 2001 From: Alexey Rogachevskiy Date: Thu, 13 Aug 2020 22:53:44 +0300 Subject: [PATCH 07/25] travis: Remove changelog generation --- .travis.yml | 9 ------ gen_changelog.py | 83 ------------------------------------------------ 2 files changed, 92 deletions(-) delete mode 100644 gen_changelog.py diff --git a/.travis.yml b/.travis.yml index 6094f267..5ba46df9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -100,14 +100,6 @@ jobs: verbose: true on: branch: master - - stage: Annotate - name: Auto-generate changelog - language: python - python: 3.6 - install: - - pip install GitPython PyGithub - script: - - PYTHONUNBUFFERED=1 python ./gen_changelog.py - stage: Build name: Editorconfig-lint language: generic @@ -118,7 +110,6 @@ jobs: - ./ec-linux-amd64 -spaces-after-tabs -e "roslib.js|ros3d.js|eventemitter2.js|draw.cpp|BinUtils.swift|\.idea|apps/android/app|Assets.xcassets|test_parser_pass.txt|test_node_failure.txt|aruco_pose/vendor|\.stl|\.dxf|\.dae" stages: - Build - - Annotate # More info there # https://github.com/travis-ci/travis-ci/issues/6893 # https://docs.travis-ci.com/user/customizing-the-build/ diff --git a/gen_changelog.py b/gen_changelog.py deleted file mode 100644 index 6f332f39..00000000 --- a/gen_changelog.py +++ /dev/null @@ -1,83 +0,0 @@ -#!/usr/bin/env python3 - -# Generate and upload changelog - -from git import Repo, exc -from github import Github -import os -import sys - -upload_changelog = True - -try: - current_tag = os.environ['TRAVIS_TAG'] - if current_tag == '': - current_tag = 'HEAD' - upload_changelog = False - print('TRAVIS_TAG is set to {}'.format(current_tag)) -except KeyError: - print('TRAVIS_TAG not set - not uploading changelog') - current_tag = 'HEAD' - upload_changelog = False - -try: - api_key = os.environ['GITHUB_OAUTH_TOKEN'] -except KeyError: - print('GITHUB_OAUTH_TOKEN not set - not uploading changelog') - api_key = None - upload_changelog = False - -try: - repo_slug = os.environ['TRAVIS_REPO_SLUG'] -except KeyError: - print('TRAVIS_REPO_SLUG not set - cannot determine remote repository') - repo_slug = '' - if upload_changelog: - exit(1) - -if len(sys.argv) > 1: - repo_path = sys.argv[1] -else: - repo_path = '.' - -print('Opening repository at {}'.format(repo_path)) -repo = Repo(repo_path) -git = repo.git() -try: - print('Unshallowing repository') - git.fetch('--unshallow', '--tags') -except exc.GitCommandError: - print('Repository already unshallowed') -print('Attempting to get previous tag') -try: - base_tag = git.describe('--tags', '--abbrev=0', '{}^'.format(current_tag)) -except exc.GitCommandError: - print('No tags found') - base_tag = 'empty' -print('Base tag set to {}'.format(base_tag)) - -if base_tag == 'empty': - changelog_link = 'https://github.com/{}/commits'.format(repo_slug) -else: - changelog_link = 'https://github.com/{}/compare/{}...{}'.format(repo_slug, base_tag, current_tag) -print('Current changelog: \n{}'.format(changelog_link)) - -# Only interact with Github if uploading is enabled -if upload_changelog: - gh = Github(api_key) - gh_repo = gh.get_repo(repo_slug) - # Get all releases and find ours by its tag name - gh_release = None - for release in gh_repo.get_releases(): - if release.tag_name == current_tag: - gh_release = release - if gh_release is None: - # We could not find the correct release, so here's our last resort. It will most likely fail. - gh_release = gh_repo.get_release(current_tag) - gh_body = gh_release.body - if gh_body is None: - gh_body = '' - gh_body = '{}\nChanges between `{}` and `{}`: {}.'.format(gh_body, base_tag, current_tag, changelog_link) - print('New release body: {}'.format(gh_body)) - gh_release.update_release(gh_release.tag_name, gh_body, draft=True, prerelease=True, - tag_name=gh_release.tag_name, target_commitish=gh_release.target_commitish) From 68f23babcc3753b2cd43038fd740bb967cdd8e13 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Thu, 20 Aug 2020 20:06:44 +0300 Subject: [PATCH 08/25] docs: more reasonable title --- docs/ru/simulation.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ru/simulation.md b/docs/ru/simulation.md index e61607f3..1b3a6cb9 100644 --- a/docs/ru/simulation.md +++ b/docs/ru/simulation.md @@ -1,4 +1,4 @@ -# Общая информация +# Симулятор Среда симуляции Клевера позволяет пользователям запускать и отлаживать свой код в симуляторе, используя большинство функций, доступных на реальном дроне. Симулятор использует [режим PX4 SITL](sitl.md) и тот же код, использующий ROS, что и настоящий дрон. Большинство железа также симулируется. From 2ddf831842c8d844f9ed85d83cafac09addc4519 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Thu, 20 Aug 2020 20:07:35 +0300 Subject: [PATCH 09/25] docs: remove trailing whitespace --- docs/ru/simulation_native.md | 10 +++++----- docs/ru/simulation_usage.md | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/ru/simulation_native.md b/docs/ru/simulation_native.md index c55c9854..3d948436 100644 --- a/docs/ru/simulation_native.md +++ b/docs/ru/simulation_native.md @@ -1,6 +1,6 @@ # Сборка на собственной машине -Настройка среды для симуляции с нуля требует некоторых усилий, однако это приведет к улучшению производительности и к уменьшению вероятности появления проблем с драйверами. +Настройка среды для симуляции с нуля требует некоторых усилий, однако это приведет к улучшению производительности и к уменьшению вероятности появления проблем с драйверами. Требования для сборки: установлены Ubuntu 18.04 и [ROS](ros-install.md). @@ -57,10 +57,10 @@ sudo ./ubuntu.sh --no-nuttx Пакет `sitl_gazebo`, содержащий плагины нужно пропатчить, из-за недавних изменений в MAVLink. Эти патчи уже применены в [образе виртуальной машины](simulation_vm.md) и хранятся в репозитории CopterExpress/VM. Запустите следующие команды для загрузки и применения патчей: ```bash -cd ~/catkin_ws/src/Firmware/Tools/sitl_gazebo -wget https://raw.githubusercontent.com/CopterExpress/clover_vm/master/assets/patches/sitl_gazebo.patch +cd ~/catkin_ws/src/Firmware/Tools/sitl_gazebo +wget https://raw.githubusercontent.com/CopterExpress/clover_vm/master/assets/patches/sitl_gazebo.patch patch -p1 < sitl_gazebo.patch -rm sitl_gazebo.patch +rm sitl_gazebo.patch ``` ## Установка датасетов geographiclib @@ -69,7 +69,7 @@ rm sitl_gazebo.patch ```bash cd ~ -wget https://raw.githubusercontent.com/mavlink/mavros/6f5bd5a1a67c19c2e605f33de296b1b1be9d02fc/mavros/scripts/install_geographiclib_datasets.sh +wget https://raw.githubusercontent.com/mavlink/mavros/6f5bd5a1a67c19c2e605f33de296b1b1be9d02fc/mavros/scripts/install_geographiclib_datasets.sh chmod +x ./install_geographiclib_datasets.sh sudo ./install_geographiclib_datasets.sh rm ./install_geographiclib_datasets.sh diff --git a/docs/ru/simulation_usage.md b/docs/ru/simulation_usage.md index 1778a6a7..01bfe97c 100644 --- a/docs/ru/simulation_usage.md +++ b/docs/ru/simulation_usage.md @@ -12,7 +12,7 @@ source ~/catkin_ws/devel/setup.bash roslaunch clover_simulation simulator.launch ``` -> **Note** Кроме того, если вы используете виртуальную машину, просто дважды щелкните `Gazebo PX4` на рабочем столе. +> **Note** Кроме того, если вы используете виртуальную машину, просто дважды щелкните `Gazebo PX4` на рабочем столе. Это запустит Gazebo сервер и клиент, бинарные файлы PX4 и ноды Клевера. Терминал, в котором была запущена команда, будет отображать отладочные сообщения от нод и PX4, а также принимать входные данные для интерпретатора команд PX4: @@ -79,7 +79,7 @@ PX4, начиная с версии 1.9, поддерживает [принуд PX4_SIM_SPEED_FACTOR=0.42 roslaunch clover_simulation simulator.launch ``` -> **Note** При использовании виртуальной машины удобнее добавить эту переменную в ярлык запуска Gazebo на рабочем столе. Нажмите правой кнопкой на значок Gazebo, выберите "Properties..." и добавьте `PX4_SIM_SPEED_FACTOR=0.42` в поле Command, как показано на иллюстрации: +> **Note** При использовании виртуальной машины удобнее добавить эту переменную в ярлык запуска Gazebo на рабочем столе. Нажмите правой кнопкой на значок Gazebo, выберите "Properties..." и добавьте `PX4_SIM_SPEED_FACTOR=0.42` в поле Command, как показано на иллюстрации: ![Gazebo PX4 launcher command](../assets/simulation_usage/06_gazebo_px4_launcher.png) ### Выделение ресурсов для виртуальной машины From 333cf9655fa906c2f0095040e22d88a5d9f1494b Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Thu, 20 Aug 2020 20:09:32 +0300 Subject: [PATCH 10/25] docs: remove trailing whitespace --- docs/en/simulation_native.md | 8 ++++---- docs/en/simulation_usage.md | 2 +- docs/en/simulation_vm.md | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/docs/en/simulation_native.md b/docs/en/simulation_native.md index eab42c55..c093cebf 100644 --- a/docs/en/simulation_native.md +++ b/docs/en/simulation_native.md @@ -57,10 +57,10 @@ sudo ./ubuntu.sh --no-nuttx The `sitl_gazebo` package containing required Gazebo plugins needs patching due to recent changes in MAVLink. These patches are already preapplied in the [virtual machine image](simulation_vm.md) and are stored in the VM repository. Run the following commands to download and apply the patches: ```bash -cd ~/catkin_ws/src/Firmware/Tools/sitl_gazebo -wget https://raw.githubusercontent.com/CopterExpress/clover_vm/master/assets/patches/sitl_gazebo.patch +cd ~/catkin_ws/src/Firmware/Tools/sitl_gazebo +wget https://raw.githubusercontent.com/CopterExpress/clover_vm/master/assets/patches/sitl_gazebo.patch patch -p1 < sitl_gazebo.patch -rm sitl_gazebo.patch +rm sitl_gazebo.patch ``` ## Install geographiclib datasets @@ -69,7 +69,7 @@ rm sitl_gazebo.patch ```bash cd ~ -wget https://raw.githubusercontent.com/mavlink/mavros/6f5bd5a1a67c19c2e605f33de296b1b1be9d02fc/mavros/scripts/install_geographiclib_datasets.sh +wget https://raw.githubusercontent.com/mavlink/mavros/6f5bd5a1a67c19c2e605f33de296b1b1be9d02fc/mavros/scripts/install_geographiclib_datasets.sh chmod +x ./install_geographiclib_datasets.sh sudo ./install_geographiclib_datasets.sh rm ./install_geographiclib_datasets.sh diff --git a/docs/en/simulation_usage.md b/docs/en/simulation_usage.md index e50f4974..d41735cc 100644 --- a/docs/en/simulation_usage.md +++ b/docs/en/simulation_usage.md @@ -79,7 +79,7 @@ In this example you should set `PX4_SIM_SPEED_FACTOR` to `0.42` when launching t PX4_SIM_SPEED_FACTOR=0.42 roslaunch clover_simulation simulator.launch ``` -> **Note** If you are using the VM, it may be convenient to put the value in the Gazebo desktop shortcut. Right-click on the Gazebo icon, select "Properties..." and add `PX4_SIM_SPEED_FACTOR=0.42` to the Command field as follows: +> **Note** If you are using the VM, it may be convenient to put the value in the Gazebo desktop shortcut. Right-click on the Gazebo icon, select "Properties..." and add `PX4_SIM_SPEED_FACTOR=0.42` to the Command field as follows: ![Gazebo PX4 launcher command](../assets/simulation_usage/06_gazebo_px4_launcher.png) ### Allocate more resources to the VM diff --git a/docs/en/simulation_vm.md b/docs/en/simulation_vm.md index a813c579..2dd3f889 100644 --- a/docs/en/simulation_vm.md +++ b/docs/en/simulation_vm.md @@ -26,8 +26,8 @@ Make sure that you have hardware virtualization enabled in your BIOS/UEFI (it ma ![Open dialog with clever-devel.ova selected](../assets/simulation_setup_vm/01_import_vm.png) - > **Note** You may see a dialog box with a warning about the VM format: - ![Import failure dialog](../assets/simulation_setup_vm/02_import_failure.png) + > **Note** You may see a dialog box with a warning about the VM format: + ![Import failure dialog](../assets/simulation_setup_vm/02_import_failure.png) You can safely ignore the warning and press **Retry**. 2. Right-click on the VM name and select **Virtual Machine Settings**. In the new window, set the following parameters: From 106209d79b7f25f13802ee96f56b563234b60e9e Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Thu, 20 Aug 2020 20:28:55 +0300 Subject: [PATCH 11/25] docs: add links to Python tutorials --- docs/en/programming.md | 2 ++ docs/ru/programming.md | 2 ++ 2 files changed, 4 insertions(+) diff --git a/docs/en/programming.md b/docs/en/programming.md index 1473b89b..5967189a 100644 --- a/docs/en/programming.md +++ b/docs/en/programming.md @@ -32,6 +32,8 @@ Read more in the [GPS connection](gps.md) article. ## Autonomous flight {#flight} +> **Info** For studying Python programming language, see [tutorial](https://www.learnpython.org/en/Welcome). + After you've configured your positioning system, you can start writing programs for autonomous flights. Use the [SSH connection to the Raspberry Pi](ssh.md) to run your scripts. In order to run a Python script use the `python` command: ```bash diff --git a/docs/ru/programming.md b/docs/ru/programming.md index 72f7eb39..a0bd0ab4 100644 --- a/docs/ru/programming.md +++ b/docs/ru/programming.md @@ -32,6 +32,8 @@ ## Автономный полет {#flight} +> **Info** Для изучения языка программирования Python обращайтесь к [самоучителю](https://pythonworld.ru/samouchitel-python). + После настройки системы позиционирования становится возможным написание скриптов для автономных полетов. Для выполнения скриптов [подключитесь в Raspberry Pi по SSH](ssh.md). Для того, чтобы запустить Python-скрипт, используйте команду `python`: ```bash From d4d25c61a2d80677b13b89b4e8bcc03502040ed6 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Fri, 21 Aug 2020 18:16:25 +0300 Subject: [PATCH 12/25] docs: rework and simplify navigate_wait snippet, move it on top --- builder/assets/examples/navigate_wait.py | 2 +- docs/en/frames.md | 2 +- docs/en/programming.md | 2 +- docs/en/snippets.md | 134 ++++++------------- docs/ru/frames.md | 2 +- docs/ru/programming.md | 2 +- docs/ru/snippets.md | 161 ++++++++--------------- 7 files changed, 99 insertions(+), 206 deletions(-) diff --git a/builder/assets/examples/navigate_wait.py b/builder/assets/examples/navigate_wait.py index 7ead3be8..baef761b 100644 --- a/builder/assets/examples/navigate_wait.py +++ b/builder/assets/examples/navigate_wait.py @@ -1,4 +1,4 @@ -# Information: https://clover.coex.tech/en/snippets.html#block-nav +# Information: https://clover.coex.tech/en/snippets.html#navigate_wait import math import rospy diff --git a/docs/en/frames.md b/docs/en/frames.md index c3840d96..7eab6f12 100644 --- a/docs/en/frames.md +++ b/docs/en/frames.md @@ -8,7 +8,7 @@ Main frames in the `clover` package: * `map` has its origin at the flight controller initialization point and may be considered stationary. It is shown as a white grid on the image above; * `base_link` is rigidly bound to the drone. It is shown by the simplified drone model on the image above; * `body` is bound to the drone, but its Z axis points up regardless of the drone's pitch and roll. It is shown by the red, blue and green lines in the illustration; -* `navigate_target` is bound to the current navigation target (as set by the [navigate](simple_offboard.md#navigate) service); +*
`navigate_target` is bound to the current navigation target (as set by the [navigate](simple_offboard.md#navigate) service); * `setpoint` is current position setpoint. Additional frames become available when [ArUco positioning system](aruco.md) is active: diff --git a/docs/en/programming.md b/docs/en/programming.md index 5967189a..cbd04bc3 100644 --- a/docs/en/programming.md +++ b/docs/en/programming.md @@ -76,7 +76,7 @@ rospy.sleep(3) land() ``` -> **Note** The `navigate` function call is not blocking; that is, the program will continue executing the next commands before the drone arrives at the set point. Look at the [`navigate_wait`](snippets.md#block-nav) snippet for a blocking function. +> **Note** The `navigate` function call is not blocking; that is, the program will continue executing the next commands before the drone arrives at the set point. Look at the [`navigate_wait`](snippets.md#navigate_wait) snippet for a blocking function. Note that only the first `navigate` call has its `auto_arm` parameter set to `True`. This parameter arms the drone and transitions it to the OFFBOARD flight mode. diff --git a/docs/en/snippets.md b/docs/en/snippets.md index 90939963..7ca5ee7c 100644 --- a/docs/en/snippets.md +++ b/docs/en/snippets.md @@ -4,100 +4,17 @@ Code examples Python --- -### # {#distance} +### # {#navigate_wait} -Calculating the distance between two points (**important**: the points are to be in the same [system of coordinates](frames.md)): + -```python -def get_distance(x1, y1, z1, x2, y2, z2): - return math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2 + (z1 - z2) ** 2) -``` - -### # {#distance-global} - -Approximation of distance (in meters) between two global coordinates (latitude/longitude): - -```python -def get_distance_global(lat1, lon1, lat2, lon2): - return math.hypot(lat1 - lat2, lon1 - lon2) * 1.113195e5 -``` - -### # {#block-takeoff} - -Takeoff and waiting for it to finish: - -```python -z = 2 # altitude -tolerance = 0.2 # precision of altitude check (m) - -# Saving the initial point -start = get_telemetry() - -# Take off and leveling at 2 m above the ground -print navigate(z=z, speed=0.5, frame_id='body', auto_arm=True) - -# Waiting for takeoff -while not rospy.is_shutdown(): - # Checking current altitude - if start.z + z - get_telemetry().z < tolerance: - # Takeoff complete - break - rospy.sleep(0.2) -``` - -This code can be wrapped in a function: - -```python -def takeoff_wait(alt, speed=0.5, tolerance=0.2): - start = get_telemetry() - print navigate(z=alt, speed=speed, frame_id='body', auto_arm=True) - - while not rospy.is_shutdown(): - if start.z + alt - get_telemetry().z < tolerance: - break - - rospy.sleep(0.2) -``` - -### # {#block-nav} + Flying towards a point and waiting for copter's arrival: ```python -tolerance = 0.2 # precision of arrival check (m) -frame_id='aruco_map' - -# Flying to point 1:2:3 in the field of ArUco markers -print navigate(frame_id=frame_id, x=1, y=2, z=3, speed=0.5) - -# Wait for the copter to arrive at the requested point -while not rospy.is_shutdown(): - telem = get_telemetry(frame_id=frame_id) - # Calculating the distance to the requested point - if get_distance(1, 2, 3, telem.x, telem.y, telem.z) < tolerance: - # Arrived at the requested point - break - rospy.sleep(0.2) -``` - -This code can be wrapped into a function: - -```python -def navigate_wait(x, y, z, speed, frame_id, tolerance=0.2): - navigate(x=x, y=y, z=z, speed=speed, frame_id=frame_id) - - while not rospy.is_shutdown(): - telem = get_telemetry(frame_id=frame_id) - if get_distance(x, y, z, telem.x, telem.y, telem.z) < tolerance: - break - rospy.sleep(0.2) -``` - -A more universal solution, utilizing the `navigate_target` frame, which corresponds to the navigating target point of the drone: - -```python -def navigate_wait(x, y, z, speed, frame_id, tolerance=0.2): - navigate(x=x, y=y, z=z, speed=speed, frame_id=frame_id) +def navigate_wait(x=0, y=0, z=0, yaw=float('nan'), speed=0.5, frame_id='', auto_arm=False, tolerance=0.2): + navigate(x=x, y=y, z=z, yaw=yaw, speed=speed, frame_id=frame_id, auto_arm=auto_arm) while not rospy.is_shutdown(): telem = get_telemetry(frame_id='navigate_target') @@ -106,10 +23,24 @@ def navigate_wait(x, y, z, speed, frame_id, tolerance=0.2): rospy.sleep(0.2) ``` -This code also can be used for navigating using `body` frame. +This function utilizes [`navigate_target`](frames.md#navigate_target) frame for computing the distance to the target. + +Using the function for flying to the point x=3, y=2, z=1 in [marker's map](aruco_map.md): + +```python +navigate_wait(x=3, y=2, z=1, frame_id='aruco_map') +``` + +This function can be used for taking off as well: + +```python +navigate_wait(z=1, frame_id='body', auto_arm=True) +``` ### # {#block-land} + + Landing and waiting until the copter lands: ```python @@ -118,13 +49,28 @@ while get_telemetry().armed: rospy.sleep(0.2) ``` -This code can be wrapped in a function: +Usage: ```python -def land_wait(): - land() - while get_telemetry().armed: - rospy.sleep(0.2) +land_wait() +``` + +### # {#get_distance} + +Calculating the distance between two points (**important**: the points are to be in the same [system of coordinates](frames.md)): + +```python +def get_distance(x1, y1, z1, x2, y2, z2): + return math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2 + (z1 - z2) ** 2) +``` + +### # {#get_distance_global} + +Approximation of distance (in meters) between two global coordinates (latitude/longitude): + +```python +def get_distance_global(lat1, lon1, lat2, lon2): + return math.hypot(lat1 - lat2, lon1 - lon2) * 1.113195e5 ``` ### # {#disarm} diff --git a/docs/ru/frames.md b/docs/ru/frames.md index cdf593ca..6bc760fc 100644 --- a/docs/ru/frames.md +++ b/docs/ru/frames.md @@ -10,7 +10,7 @@ * `map` — координаты относительно точки инициализации полетного контроллера: белая сетка на иллюстрации; * `base_link` — координаты относительно квадрокоптера: схематичное изображение квадрокоптера на иллюстрации; * `body` — координаты относительно квадрокоптера без учета наклонов по тангажу и крену: красная, синяя и зеленая линии на иллюстрации; -* `navigate_target` – координаты точки, в которую сейчас летит дрон (с использованием [navigate](simple_offboard.md#navigate)); +* `navigate_target` – координаты точки, в которую сейчас летит дрон (с использованием [navigate](simple_offboard.md#navigate)); * `setpoint` – текущий setpoint по позиции. При использовании [системы позиционирования по ArUco-маркерам](aruco.md) появляются дополнительные фреймы: diff --git a/docs/ru/programming.md b/docs/ru/programming.md index a0bd0ab4..995f133e 100644 --- a/docs/ru/programming.md +++ b/docs/ru/programming.md @@ -76,7 +76,7 @@ rospy.sleep(3) land() ``` -> **note** Функция navigate не ожидает, пока дрон долетит до целевой точки; скрипт продолжит выполнение сразу. Для блокирующей версии смотрите пример функции [`navigate_wait`](snippets.md#block-nav). +> **note** Функция navigate не ожидает, пока дрон долетит до целевой точки; скрипт продолжит выполнение сразу. Для блокирующей версии смотрите пример функции [`navigate_wait`](snippets.md#navigate_wait). Обратите внимание, что параметр `auto_arm` установлен на `True` только у первого вызова функции `navigate`. Этот параметр армит дрон и переводит его в режим автономного полета (OFFBOARD). diff --git a/docs/ru/snippets.md b/docs/ru/snippets.md index eb328ac5..0dcb5ed8 100644 --- a/docs/ru/snippets.md +++ b/docs/ru/snippets.md @@ -13,7 +13,59 @@ Python -### # {#distance} +### # {#navigate_wait} + + + + + +Полет в точку и ожидание окончания полета: + +```python +def navigate_wait(x=0, y=0, z=0, yaw=float('nan'), speed=0.5, frame_id='', auto_arm=False, tolerance=0.2): + navigate(x=x, y=y, z=z, yaw=yaw, speed=speed, frame_id=frame_id, auto_arm=auto_arm) + + while not rospy.is_shutdown(): + telem = get_telemetry(frame_id='navigate_target') + if math.sqrt(telem.x ** 2 + telem.y ** 2 + telem.z ** 2) < tolerance: + break + rospy.sleep(0.2) +``` + +Для того, чтобы определить расстояние до целевой точки, функция использует фрейм [`navigate_target`](frames.md#navigate_target). + +Использование функции для полета в точку x=3, y=2, z=1 [относительно карты маркеров](aruco_map.md): + +```python +navigate_wait(x=3, y=2, z=1, frame_id='aruco_map') +``` + +Эту функцию можно использовать и для взлета: + +```python +navigate_wait(z=1, frame_id='body', auto_arm=True) +``` + +### # {#land_wait} + + + +Посадка и ожидание окончания посадки: + +```python +def land_wait(): + land() + while get_telemetry().armed: + rospy.sleep(0.2) +``` + +Использование: + +```python +land_wait() +``` + +### # {#get_distance} Функция определения расстояния между двумя точками (**важно**: точки должны быть в одной [системе координат](frames.md)): @@ -26,7 +78,7 @@ def get_distance(x1, y1, z1, x2, y2, z2): return math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2 + (z1 - z2) ** 2) ``` -### # {#distance-global} +### # {#get_distance_global} Функция для приблизительного определения расстояния (в метрах) между двумя глобальными координатами (широта/долгота): @@ -39,111 +91,6 @@ def get_distance_global(lat1, lon1, lat2, lon2): return math.hypot(lat1 - lat2, lon1 - lon2) * 1.113195e5 ``` -### # {#block-takeoff} - -Взлет и ожидание окончания взлета: - -```python -z = 2 # высота -tolerance = 0.2 # точность проверки высоты (м) - -# Запоминаем изначальную точку -start = get_telemetry() - -# Взлетаем на 2 м -print navigate(z=z, speed=0.5, frame_id='body', auto_arm=True) - -# Ожидаем взлета -while not rospy.is_shutdown(): - # Проверяем текущую высоту - if start.z + z - get_telemetry().z < tolerance: - # Взлет завершен - break - rospy.sleep(0.2) -``` - -Вышеприведенный код может быть обернут в функцию: - -```python -def takeoff_wait(alt, speed=0.5, tolerance=0.2): - start = get_telemetry() - print navigate(z=alt, speed=speed, frame_id='body', auto_arm=True) - - while not rospy.is_shutdown(): - if start.z + alt - get_telemetry().z < tolerance: - break - - rospy.sleep(0.2) -``` - -### # {#block-nav} - -Лететь в точку и ждать пока коптер долетит в нее: - -```python -tolerance = 0.2 # точность проверки прилета (м) -frame_id='aruco_map' - -# Летим в точку 1:2:3 в поле ArUco-маркеров -print navigate(frame_id=frame_id, x=1, y=2, z=3, speed=0.5) - -# Ждем, пока коптер долетит до запрошенной точки -while not rospy.is_shutdown(): - telem = get_telemetry(frame_id=frame_id) - # Вычисляем расстояние до заданной точки - if get_distance(1, 2, 3, telem.x, telem.y, telem.z) < tolerance: - # Долетели до необходимой точки - break - rospy.sleep(0.2) -``` - -Вышеприведенный код может быть обернут в функцию: - -```python -def navigate_wait(x, y, z, speed, frame_id, tolerance=0.2): - navigate(x=x, y=y, z=z, speed=speed, frame_id=frame_id) - - while not rospy.is_shutdown(): - telem = get_telemetry(frame_id=frame_id) - if get_distance(x, y, z, telem.x, telem.y, telem.z) < tolerance: - break - rospy.sleep(0.2) -``` - -Более универсальная функция с использованием фрейма `navigate_target`, который совпадает с целевой точкой навигации дрона: - -```python -def navigate_wait(x, y, z, speed, frame_id, tolerance=0.2): - navigate(x=x, y=y, z=z, speed=speed, frame_id=frame_id) - - while not rospy.is_shutdown(): - telem = get_telemetry(frame_id='navigate_target') - if math.sqrt(telem.x ** 2 + telem.y ** 2 + telem.z ** 2) < tolerance: - break - rospy.sleep(0.2) -``` - -Такой код может быть использован для полета в том числе с использованием фрейма `body`. - -### # {#block-land} - -Посадка и ожидание окончания посадки: - -```python -land() -while get_telemetry().armed: - rospy.sleep(0.2) -``` - -Вышеприведенный код может быть обернут в функцию: - -```python -def land_wait(): - land() - while get_telemetry().armed: - rospy.sleep(0.2) -``` - ### # {#disarm} Дизарм коптера (выключение винтов, **коптер упадет**): From 14e49a4f7b3184e74eba59cbc758d045abead934 Mon Sep 17 00:00:00 2001 From: oponfil <69752190+oponfil@users.noreply.github.com> Date: Fri, 21 Aug 2020 23:21:29 +0700 Subject: [PATCH 13/25] docs: update projects article (#268) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update projects.md Скорректировал статус по существующим проектам и добавил новые проекты. * docs: edit projects article Co-authored-by: Oleg Kalachev --- docs/ru/projects.md | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/docs/ru/projects.md b/docs/ru/projects.md index 7584010b..f19d4223 100644 --- a/docs/ru/projects.md +++ b/docs/ru/projects.md @@ -2,20 +2,33 @@ Список возможных проектов для стажировок и практических работ в вузах и колледжах. -|Проект|Примечания| +|Проект/Идея|Примечания| |------|----------| -|Шоу дронов|[Решение от COEX](https://github.com/CopterExpress/clever-show) (разработка началась по программе стажировок).| -|Интеграция позиционирования по [Vive Tracker](https://www.vive.com/ru/accessory/vive-tracker/)|[Наработки](https://github.com/goldarte/roslibsurvive)| -|Интеграция системы позиционирования [Pozyx](https://www.pozyx.io)|[Наработки](https://github.com/goldarte/pozyx_clever)| +|Шоу дронов|[Решение от COEX](https://github.com/CopterExpress/clever-show) (разработка началась по программе стажировок). Проект продолжает разрабатываться.| +|Интеграция позиционирования по [Vive Tracker](https://www.vive.com/ru/accessory/vive-tracker/)|[Наработки](https://github.com/goldarte/roslibsurvive).| +|Интеграция системы позиционирования [Pozyx](https://www.pozyx.io)|[Наработки](https://github.com/goldarte/pozyx_clever).| |Интеграция системы позиционирования типа Motion Capture|| |Разработка и интеграция дешевого Motion Capture|| |Интеграция блочного программирования (Scratch, Blockly)|[Решение с программы стажировок](clever_blocks.md). Официальное решение COEX в разработке.| |Улучшение алгоритма визуального позиционирования (optical flow): трекинг по фичам, расчет угла по yaw|| -|Симулятор Клевера|[Решение COEX](https://github.com/CopterExpress/clover_vm) (на основе Gazebo)| -|Автоматический захват грузов Клевером|Впервые было [реализовано](https://www.youtube.com/watch?v=E1_ehvJRKxg) на Олимпиаде НТИ 2019| +|Симулятор Клевера|[Решение от COEX](https://github.com/CopterExpress/clover_vm) (на основе Gazebo). Проект продолжает разрабатываться.| +|Автоматический захват грузов Клевером|Впервые было [реализовано](https://www.youtube.com/watch?v=E1_ehvJRKxg) на Олимпиаде НТИ 2019.| |Распознавание и ловля летящих объектов (шариков)|| |Веб-инструмент для калибровки камеры|| |Инструмент для редактирования карт маркеров|[Решение с программы стажировок](arucogenmap.md)| |Точный полет по линии|[Решение с программы стажировок](https://github.com/Tennessium/robohuyna)| -|Двойные, тройные, четверные флипы|| -|Граффити-дрон|https://tsuru.su/project/graffiti-drone/| +|Двойные, тройные, четверные флипы|Исследование стратегий и конфигураций. [Двойные флипы на Клевере](https://www.youtube.com/watch?v=AzVs-DRPE5A).
["A Simple Learning Strategy for High-Speed Quadrocopter Multi-Flips"](https://ethz.ch/content/dam/ethz/special-interest/mavt/dynamic-systems-n-control/idsc-dam/Research_DAndrea/FMA/LupashinSchoellig_ICRA2010.pdf).| +|Граффити-дрон|[Пример реализации на другой платформе](https://tsuru.su/project/graffiti-drone/).| +|Коптер-официант|| +|Автоматическая зарядная станция для Клевера|| +|Полет за другим дроном / перехват другого дрона|| +|Рама Клевера 4 на 3D-принтере|| +|Измерения уровня загрязнения воздуха / газоанализатор на дроне|| +|Полет двух коптеров в жесткой связке|| +|Автоматический подсчёт автомобилей на трассах|| +|Программное определение падений в PX4|| +|Начало полета в броске|[Throw Mode](https://ardupilot.org/copter/docs/throw-mode.html) в ArduPilot.| +|Полет коптера на точку на изображении с камеры, направленной вертикально вниз|| +|Зарядная станция для коптера на солнечном концентраторе|| + +Вышеперечисленные и другие проекты вы также можете реализовать в рамках конкурса проектов [Copter Hack](https://ru.coex.tech/copterhack). Мы приглашаем команды для реализации проектов и в других форматах. From ee9c956fc71f2768f842dba8d3cdb25ff1b82522 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Fri, 21 Aug 2020 19:27:58 +0300 Subject: [PATCH 14/25] docs: add cloud simulator to projects --- docs/ru/projects.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/ru/projects.md b/docs/ru/projects.md index f19d4223..770177ce 100644 --- a/docs/ru/projects.md +++ b/docs/ru/projects.md @@ -12,6 +12,7 @@ |Интеграция блочного программирования (Scratch, Blockly)|[Решение с программы стажировок](clever_blocks.md). Официальное решение COEX в разработке.| |Улучшение алгоритма визуального позиционирования (optical flow): трекинг по фичам, расчет угла по yaw|| |Симулятор Клевера|[Решение от COEX](https://github.com/CopterExpress/clover_vm) (на основе Gazebo). Проект продолжает разрабатываться.| +|Облачная платформа для симулятора Клевера|По аналогии или на основе [ROS Development Studio](http://rosds.online/).| |Автоматический захват грузов Клевером|Впервые было [реализовано](https://www.youtube.com/watch?v=E1_ehvJRKxg) на Олимпиаде НТИ 2019.| |Распознавание и ловля летящих объектов (шариков)|| |Веб-инструмент для калибровки камеры|| From 423490304b11916ffa870e01ad80001f59fa8fcc Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Fri, 21 Aug 2020 19:37:18 +0300 Subject: [PATCH 15/25] docs: add link to Clover blocks development --- docs/ru/projects.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ru/projects.md b/docs/ru/projects.md index 770177ce..b378a62d 100644 --- a/docs/ru/projects.md +++ b/docs/ru/projects.md @@ -9,7 +9,7 @@ |Интеграция системы позиционирования [Pozyx](https://www.pozyx.io)|[Наработки](https://github.com/goldarte/pozyx_clever).| |Интеграция системы позиционирования типа Motion Capture|| |Разработка и интеграция дешевого Motion Capture|| -|Интеграция блочного программирования (Scratch, Blockly)|[Решение с программы стажировок](clever_blocks.md). Официальное решение COEX в разработке.| +|Интеграция блочного программирования (Scratch, Blockly)|[Решение с программы стажировок](clever_blocks.md). Официальное решение COEX [в разработке](https://github.com/CopterExpress/clover/tree/blockly).| |Улучшение алгоритма визуального позиционирования (optical flow): трекинг по фичам, расчет угла по yaw|| |Симулятор Клевера|[Решение от COEX](https://github.com/CopterExpress/clover_vm) (на основе Gazebo). Проект продолжает разрабатываться.| |Облачная платформа для симулятора Клевера|По аналогии или на основе [ROS Development Studio](http://rosds.online/).| From a62107132daad450899b76d6364b2cd98fc25801 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Fri, 21 Aug 2020 22:08:07 +0300 Subject: [PATCH 16/25] docs: add wait_arrival snippet --- docs/en/snippets.md | 21 +++++++++++++++++++++ docs/ru/snippets.md | 21 +++++++++++++++++++++ 2 files changed, 42 insertions(+) diff --git a/docs/en/snippets.md b/docs/en/snippets.md index 7ca5ee7c..4d691fb6 100644 --- a/docs/en/snippets.md +++ b/docs/en/snippets.md @@ -13,6 +13,10 @@ Python Flying towards a point and waiting for copter's arrival: ```python +import math + +#... + def navigate_wait(x=0, y=0, z=0, yaw=float('nan'), speed=0.5, frame_id='', auto_arm=False, tolerance=0.2): navigate(x=x, y=y, z=z, yaw=yaw, speed=speed, frame_id=frame_id, auto_arm=auto_arm) @@ -55,6 +59,23 @@ Usage: land_wait() ``` +### # {#wait_arrival} + +Wait for copter's arrival to the [navigate](simple_offboard.md#navigate) target: + +```python +import math + +# ... + +def wait_arrival(tolerance=0.2): + while not rospy.is_shutdown(): + telem = get_telemetry(frame_id='navigate_target') + if math.sqrt(telem.x ** 2 + telem.y ** 2 + telem.z ** 2) < tolerance: + break + rospy.sleep(0.2) +``` + ### # {#get_distance} Calculating the distance between two points (**important**: the points are to be in the same [system of coordinates](frames.md)): diff --git a/docs/ru/snippets.md b/docs/ru/snippets.md index 0dcb5ed8..236eb882 100644 --- a/docs/ru/snippets.md +++ b/docs/ru/snippets.md @@ -22,6 +22,10 @@ Python Полет в точку и ожидание окончания полета: ```python +import math + +# ... + def navigate_wait(x=0, y=0, z=0, yaw=float('nan'), speed=0.5, frame_id='', auto_arm=False, tolerance=0.2): navigate(x=x, y=y, z=z, yaw=yaw, speed=speed, frame_id=frame_id, auto_arm=auto_arm) @@ -65,6 +69,23 @@ def land_wait(): land_wait() ``` +### # {#wait_arrival} + +Ожидание окончания прилета в [navigate](simple_offboard.md#navigate)-точку: + +```python +import math + +# ... + +def wait_arrival(tolerance=0.2): + while not rospy.is_shutdown(): + telem = get_telemetry(frame_id='navigate_target') + if math.sqrt(telem.x ** 2 + telem.y ** 2 + telem.z ** 2) < tolerance: + break + rospy.sleep(0.2) +``` + ### # {#get_distance} Функция определения расстояния между двумя точками (**важно**: точки должны быть в одной [системе координат](frames.md)): From ecaab1650ffe58bce7c4847b3ebf4f4fd27a073d Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Fri, 21 Aug 2020 22:46:39 +0300 Subject: [PATCH 17/25] docs: edit snippets articles --- docs/en/snippets.md | 48 ++++++++++++++++++++++----------------------- docs/ru/snippets.md | 6 ++---- 2 files changed, 25 insertions(+), 29 deletions(-) diff --git a/docs/en/snippets.md b/docs/en/snippets.md index 4d691fb6..90dcd652 100644 --- a/docs/en/snippets.md +++ b/docs/en/snippets.md @@ -1,8 +1,6 @@ -Code examples -=== +# Code examples -Python ---- +## Python ### # {#navigate_wait} @@ -10,7 +8,7 @@ Python -Flying towards a point and waiting for copter's arrival: +Fly towards a point and wait for copter's arrival: ```python import math @@ -45,7 +43,7 @@ navigate_wait(z=1, frame_id='body', auto_arm=True) -Landing and waiting until the copter lands: +Land and wait until the copter lands: ```python land() @@ -78,7 +76,7 @@ def wait_arrival(tolerance=0.2): ### # {#get_distance} -Calculating the distance between two points (**important**: the points are to be in the same [system of coordinates](frames.md)): +Calculate the distance between two points (**important**: the points are to be in the same [coordinate system](frames.md)): ```python def get_distance(x1, y1, z1, x2, y2, z2): @@ -96,7 +94,7 @@ def get_distance_global(lat1, lon1, lat2, lon2): ### # {#disarm} -Quadcopter disarm (disabling propellers **the copter will fall down**): +Disarm the drone (propellers will stop, **the drone will fall down**): ```python # Declaring a proxy: @@ -110,7 +108,7 @@ arming(False) # дизарм ### # {#transform} -Transforming the position (`PoseStamped`) from one system of coordinates ([of frame](frames.md)) to another one using [tf2] (http://wiki.ros.org/tf2): +Transform the position (`PoseStamped`) from one [coordinate system](frames.md) to another using [tf2](http://wiki.ros.org/tf2): ```python import tf2_ros @@ -122,25 +120,25 @@ tf_listener = tf2_ros.TransformListener(tf_buffer) # ... -# PoseStamped object creation (or getting it from a topic): +# Create PoseStamped object (or get it from a topic): pose = PoseStamped() -pose.header.frame_id = 'map' # frame, which is the position is specified -pose.header.stamp = rospy.get_rostime() # the instant for which the position is specified (current time) +pose.header.frame_id = 'map' # coordinate frame, in which the position is specified +pose.header.stamp = rospy.get_rostime() # the time for which the position is specified (current time) pose.pose.position.x = 1 pose.pose.position.y = 2 pose.pose.position.z = 3 pose.pose.orientation.w = 1 -frame_id = 'base_link' # target frame -transform_timeout = rospy.Duration(0.2) # wait for transformation timeout +frame_id = 'base_link' # target coordinate frame +transform_timeout = rospy.Duration(0.2) # timeout for transformation -# Transforming the position from the old frame to the new one: +# Transform the position from the old frame to the new one: new_pose = tf_buffer.transform(pose, frame_id, transform_timeout) ``` ### # {#upside-down} -Determining whether the copter is turned upside-down: +Determine whether the copter is turned upside-down: ```python PI_2 = math.pi / 2 @@ -151,7 +149,7 @@ flipped = abs(telem.pitch) > PI_2 or abs(telem.roll) > PI_2 ### # {#angle-hor} -Calculating the copter total horizontal angle: +Calculate the copter horizontal angle: ```python PI_2 = math.pi / 2 @@ -165,7 +163,7 @@ if flipped: ### # {#circle} -Flying along a circular path: +Fly along a circular path: ```python RADIUS = 0.6 # m @@ -187,7 +185,7 @@ while not rospy.is_shutdown(): ### # {#rate} -repeating an action at a frequency of 10 Hz: +Repeat an action at a frequency of 10 Hz: ```python r = rospy.Rate(10) @@ -198,7 +196,7 @@ while not rospy.is_shutdown(): ### # {#mavros-sub} -An example of subscription to a topic from MAVROS +An example of subscription to a topic from MAVROS: ```python from geometry_msgs.msg import PoseStamped, TwistStamped @@ -228,7 +226,7 @@ Information about MAVROS topics is available at [the link](mavros.md). -Sending an arbitrary [MAVLink message](mavlink.md) to the copter: +Send an arbitrary [MAVLink message](mavlink.md) to the copter: ```python # ... @@ -252,15 +250,15 @@ mavlink_pub.publish(ros_msg) ### # {#rc-sub} -Return on mode switching with the transmitter (may be used for starting an autonomous flight, see [example](https://gist.github.com/okalachev/b709f04522d2f9af97e835baedeb806b)): +React to the drone's mode switching (may be used for starting an autonomous flight, see [example](https://gist.github.com/okalachev/b709f04522d2f9af97e835baedeb806b)): ```python from mavros_msgs.msg import RCIn # Called when new data is received from the transmitter def rc_callback(data): - # Return on switch toggling of the transmitter - if data.channels[5] < 1100: + # React on toggling the mode of the transmitter + if data.channels[5] < 1100: # ... pass elif data.channels[5] > 1900: @@ -328,7 +326,7 @@ rospy.loginfo('flip') flip() ``` -Requires the [special PX4 firmware for Clover](firmware.md#modified-firmware-for-clover). Before running a flip, take all necessary safty precautions. +Requires the [special PX4 firmware for Clover](firmware.md#modified-firmware-for-clover). Before running a flip, take all necessary safety precautions. ### # {#calibrate-gyro} diff --git a/docs/ru/snippets.md b/docs/ru/snippets.md index 236eb882..adaabe5d 100644 --- a/docs/ru/snippets.md +++ b/docs/ru/snippets.md @@ -1,8 +1,6 @@ -Примеры кода -=== +# Примеры кода -Python ---- +## Python From 8ce4de191b3fb4ebc5979332864775fc825c71a9 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Tue, 25 Aug 2020 17:32:13 +0300 Subject: [PATCH 18/25] docs: little fix --- docs/ru/flight.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/ru/flight.md b/docs/ru/flight.md index 1249517a..64a60205 100644 --- a/docs/ru/flight.md +++ b/docs/ru/flight.md @@ -69,7 +69,7 @@ ### Настройка пищалки -Для того, чтобы не переразрядить и не испортить аккумулятор, рекомендуется использовать индикатор напряжения(*пищалка*). +Для того, чтобы не переразрядить и не испортить аккумулятор, рекомендуется использовать индикатор напряжения (*пищалка*). Для настройки *пищалки* подключите ее к балансировочному разъему вашего аккумулятора. Теперь, нажимая на кнопку в основании будет изменяться минимальное напряжение на ячейках. Оптимальное значение минимального напряжения является *3.5-3.6 V*. From 4d80e6f6cf902bfe2bac6c0cbae6781802425adb Mon Sep 17 00:00:00 2001 From: alamoris Date: Tue, 25 Aug 2020 19:05:44 +0300 Subject: [PATCH 19/25] docs: Small fixes --- docs/en/assemble_4_2.md | 4 ++-- docs/ru/assemble_4_2.md | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/en/assemble_4_2.md b/docs/en/assemble_4_2.md index 9c84a804..69d9ed51 100644 --- a/docs/en/assemble_4_2.md +++ b/docs/en/assemble_4_2.md @@ -74,7 +74,7 @@ -6. Install 4 6mm nylon posts and fix them with the M3x8 screws. +6. Install 4 6mm nylon posts and fix them with the M3x5 screws. @@ -200,7 +200,7 @@ Install the damper struts, fix *COEX Pix* on them with nylon nuts. -## Installing LED strip +## Installing LED strip and legs 1. Assemble the hoop for the LED strip by combining the lock on the ends. diff --git a/docs/ru/assemble_4_2.md b/docs/ru/assemble_4_2.md index acdb8407..9c876e80 100644 --- a/docs/ru/assemble_4_2.md +++ b/docs/ru/assemble_4_2.md @@ -74,7 +74,7 @@ -6. Установите 4 нейлоновые стойки 6мм и закрепите их с помощью винтов М3х8. +6. Установите 4 нейлоновые стойки 6мм и закрепите их с помощью винтов М3х5. @@ -208,7 +208,7 @@ -## Установка LED ленты +## Установка LED ленты и ножек 1. Соберите обруч для светодиодной ленты, объединив замок на концах. From d5a79babadba4133f68882a23b522f252025a08f Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Wed, 26 Aug 2020 18:09:01 +0300 Subject: [PATCH 20/25] docs: add links to demo js gcs sources --- docs/ru/javascript.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/ru/javascript.md b/docs/ru/javascript.md index 6e254bab..bb7e6b08 100644 --- a/docs/ru/javascript.md +++ b/docs/ru/javascript.md @@ -19,7 +19,7 @@ // Connection callback alert('Connected'); }); - + // Declare get_telemetry service client var getTelemetry = new ROSLIB.Service({ ros: ros, name : '/get_telemetry', serviceType : 'clover/GetTelemetry' }); @@ -49,6 +49,6 @@ ## Браузерная GCS -Смотрите также пример реализации упрощенной браузерной наземной станции (GCS) на Клевере по адресу http://192.168.11.1/clover/gcs.html. +Смотрите также пример реализации ([`gcs.html`](https://github.com/CopterExpress/clover/blob/master/clover/www/gcs.html), [`gcs.js`](https://github.com/CopterExpress/clover/blob/master/clover/www/js/gcs.js)) упрощенной браузерной наземной станции (GCS) на Клевере по адресу http://192.168.11.1/clover/gcs.html. From 1b85a9cdf2c992b5f9958087b2ced4a2556de0bf Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Wed, 26 Aug 2020 18:25:58 +0300 Subject: [PATCH 21/25] docs: simplify laser rangefinder code sample --- docs/en/laser.md | 5 ++++- docs/ru/laser.md | 5 ++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/docs/en/laser.md b/docs/en/laser.md index 99b7492f..283fd0c1 100644 --- a/docs/en/laser.md +++ b/docs/en/laser.md @@ -52,15 +52,18 @@ Set the following parameters when LPE is used (`SYS_MC_EST_GROUP` = `local_posit In order to receive data from the topic, create a subscriber: ```python +import rospy from sensor_msgs.msg import Range -# ... +rospy.init_node('flight') def range_callback(msg): # Process data from the rangefinder print 'Rangefinder distance:', msg.range rospy.Subscriber('rangefinder/range', Range, range_callback) + +rospy.spin() ``` Also it's possible to read one rangefinder measurement at a time: diff --git a/docs/ru/laser.md b/docs/ru/laser.md index ef3aba81..7b9c7623 100644 --- a/docs/ru/laser.md +++ b/docs/ru/laser.md @@ -52,15 +52,18 @@ rostopic echo /rangefinder/range Для получения данных из топика создайте подписчика: ```python +import rospy from sensor_msgs.msg import Range -# ... +rospy.init_node('flight') def range_callback(msg): # Обработка новых данных с дальномера print 'Rangefinder distance:', msg.range rospy.Subscriber('rangefinder/range', Range, range_callback) + +rospy.spin() # дальнейший код программы ``` Также существует возможность однократного получения данных с дальномера: From 88ef00e043853d4adbc9cc6336e029ef72e0d42a Mon Sep 17 00:00:00 2001 From: Alamoris Date: Thu, 27 Aug 2020 08:41:24 +0300 Subject: [PATCH 22/25] docs: translate flight articles (#269) * docs: Add translation of the article about flight exercises * docs: Add translation of the article about flight * docs: Added articles about flying to summary * docs: fix * Update docs/en/flight.md Co-authored-by: Oleg Kalachev * docs: fix * Fix * Remove unnecessary image borders * Edit flight article * Edit flight articles * Fix Co-authored-by: Oleg Kalachev --- docs/en/SUMMARY.md | 3 + docs/en/flight.md | 110 ++++++++++++++++++++++++++ docs/en/flight_exercises.md | 149 ++++++++++++++++++++++++++++++++++++ docs/ru/flight.md | 20 ++--- docs/ru/flight_exercises.md | 39 +++++----- 5 files changed, 291 insertions(+), 30 deletions(-) create mode 100644 docs/en/flight.md create mode 100644 docs/en/flight_exercises.md diff --git a/docs/en/SUMMARY.md b/docs/en/SUMMARY.md index a8e42c03..005ea7d5 100644 --- a/docs/en/SUMMARY.md +++ b/docs/en/SUMMARY.md @@ -16,6 +16,9 @@ * [Flight modes](modes.md) * [Power setup](power.md) * [Failsafe configuration](failsafe.md) +* Manual flight + * [Basics](flight.md) + * [Exercises](flight_exercises.md) * Working with Raspberry Pi * [Raspberry Pi](raspberry.md) * [RPi Image](image.md) diff --git a/docs/en/flight.md b/docs/en/flight.md new file mode 100644 index 00000000..10e9e1ca --- /dev/null +++ b/docs/en/flight.md @@ -0,0 +1,110 @@ +# Flight + +> **Info** See also official PX4 flying guide: https://docs.px4.io/v1.9.0/en/flying/. + +This section explains the basics of manual controlling the quadcopter in different modes using radio remote control (for autonomous flying see "[Programming](programming.md)") section. + +## Main features of radio remote control + +Before you can launch your drone, you need to understand how the radio remote control works. + +The drone is controlled using two sticks on the remote control. By default, the left stick controls throttle and yaw, and the right stick controls roll and pitch. These terms are used for all aircraft, from airplanes to quadcopters. + + + +* Throttle – is responsible for rotation speed of the motors. +* Yaw – is responsible for rotation around the vertical axis (Z), clockwise (when tilted to the right) and counterclockwise (when tilted to the left). +* Pitch – is responsible for tilting or moving forward / backward. +* Roll – is responsible for tilting or moving left / right. + +These descriptions assume the aircraft is turned with its back to the pilot. + + + +## Flight Modes + +Manual flight using the PX4 flight controller can be performed in different flight modes. They determine the radio controller stick assignments and other flight characteristics. For the complete list of flight modes, see the article "[Flight modes](modes.md)". + +The main manual modes are described below. + +**STABILIZED** - horizontal angle stabilization mode. In this mode, the aircraft will hold the horizon if not controlled. Functions of sticks: + +* Throttle – the average speed of rotation of the motors. +* Yaw – angular velocity around the vertical axis. +* Pitch – the angle of inclination around the transverse axis (forward / backward). +* Roll – the angle of inclination around the longitudinal axis (left / right). + +**POSCTL** - position holding mode (requires positioning system enabled). Functions of sticks: + +* Throttle – vertical flight speed. +* Yaw – angular velocity around the vertical axis. +* Pitch – linear speed of the drone (forward / backward). +* Roll – linear speed of the drone (left / right). + +**ACRO** - controlling the average rotational speed of the motors and angular speeds of the drone. This mode is the most difficult to fly and is most often used by drone racers and 3D piloting shows to perform tricks. Functions of sticks: + +* Throttle – the average speed of rotation of the motors. +* Yaw – angular velocity around the vertical axis. +* Pitch – angular velocity around the transverse axis (forward / backward). +* Roll – angular velocity around the longitudinal axis (left / right). + +> **Info** Other flight controllers may have different names for similar flight modes. + +## Preparing to fly + +### Installing propellers and batteries + +1. Install the battery strap. + + + +2. Set the propellers according to the [motor direction pattern](#prop_rotation). + + + +3. Attach the buzzer and install the battery. + +
+ + +
+ +### Setting the buzzer + +In order not to over-discharge or damage the battery, it is recommended to use a voltage indicator (*buzzer*). + +To configure the buzzer, connect it to the balance connector of your battery. By pressing the button, change the minimum voltage on the cells. The optimal value for the minimum voltage is *3.5-3.6 V*. + +
+ + +
+ +### Flight readiness states + +Before starting the flight, the aircraft must be in the *Armed* state. + +* *Armed* state – motors rotate according to throttle stick position, copter is ready to fly. +* *Disarmed* state – motors do not rotate, copter does not respond to throttle stick. + +By default, the aircraft is in the *Disarmed* state and switches to it automatically if you do not take off for a long time. + +There are several ways to change the copter's state to *Armed*: + +* Using the stick – move the left stick down to the right and wait a couple of seconds. + + + +* Using the toggle switch – the Armed / Disarmed states can be set to one of the toggle switches. For more information on setting up, see the article on [flight modes](modes.md). +* With QGC – you can arm your drone programmatically. To do this, click on the *Disarmed* label in the header and select another state. +* In the [user program](programming.md) – the copter can switch to *Armed* state if the `auto_arm=True` argument is specified in the navigation command, such as `navigate`, `set_position`, etc. + +### Kill switch + +When the *Kill Switch* is activated, no control signals are sent to the motors and the motors stop rotating. This function is used in extreme cases, for example, if you lose control of the aircraft. + +> **Caution** Be careful, *Kill Switch* does not put the copter into *Disarmed* state! + +Before disabling the *Kill Switch*, make sure the throttle stick is its down position and the aircraft is in *Disarmed* state. If the throttle stick is not in the lower position, when the *Kill Switch* is turned off, a signal corresponding to the stick position will be sent to the motors, which will lead your copter to jerk. + +**Next**: [Drone control exercises](flight_exercises.md). diff --git a/docs/en/flight_exercises.md b/docs/en/flight_exercises.md new file mode 100644 index 00000000..87b6fc4c --- /dev/null +++ b/docs/en/flight_exercises.md @@ -0,0 +1,149 @@ +# Drone control exercises + +The following are the recommended exercises for novice pilots. Repeat each exercise as many times as necessary until you feel confident in it. + +> **Hint** In case there is a person nearby who can control a copter, use [trainer mode](trainer_mode.md). + + + +> **Hint** The first flights are strongly recommended to be performed behind a protective grid. In the absence of such, the flight area must be at least 6x6 m. + +## Turning on/off motors, changing flight modes + +> **Hint** For convenience, connect to the aircraft using [QGC over Wi-Fi](gcs_bridge.md) and turn on the sound. This will allow you to monitor the change in flight modes. If you cannot connect via Wi-Fi, connect via USB to check flight modes. + +Be sure to set the flight mode to one of the toggle switches. To do this, switch the toggle to different positions and make sure that the mode change. + +It is recommended to configure *Kill Switch*. To check it, follow these steps: + +* Turn on *Kill Switch*, make sure QGC has a notification. +* Put the aircraft in *Armed* state and then enable *Kill Switch*. Make sure the motors stop. Then switch the *Kill Switch* to its original position. If the aircraft haven't automatically entered the *Disarmed* state due to inactivity, the motors will start rotating again. + +> **Caution** Set the aircraft to *Armed* state on the flight zone only. + +Make sure modes switching is assigned to toggle switch that is convenient for you. Otherwise, change it according to the [article on setting flight modes](modes.md). Repeat the above steps several times in order to remember which toggle switches are responsible for what. + +## Working with throttle + +The first step is to feel the responsiveness of the copter to the movement of the throttle stick and learn how to control it. Each drone has slightly different power reserves and therefore lifts off the ground at different stick positions. + +For this exercise, only the throttle stick should be used. It is recommended not to use the rest of the sticks during the exercise. + +The main tasks of the exercise: + +1. Drift of the copter on the ground without taking off the ground. + +### Preflight checks + +Do the following before takeoff: + +1. Check the integrity of the aircraft and the propellers are clear to rotate. +2. Make sure the aircraft is with its back toward you. +3. Turn on the aircraft by connecting the battery. +4. Move back to a safe distance. It is recommended to maintain a minimum distance of 4-5 m to the aircraft. +5. Make sure the aircraft is in *Stabilized* mode. + +Do not try to lift the copter off the ground right away, find the lowest possible stick position for the copter to start drifting on the ground. Failure to do so may result in damage or injury. + +> **Caution** If you lose control of the aircraft, you must immediately turn on *Kill Switch*. + +**Exercise №1**. Slowly lift the throttle stick up until the aircraft starts to move. At this point, it will begin to slowly drift on the ground. Leave the throttle stick in this position and wait a couple of seconds, then move the throttle stick to its original position to land the aircraft. After landing the aircraft, turn off the motors by switching to *Disarmed* state. Repeat the exercise 5–10 times to get better feel for the copter's throttle stick response. + +**Exercise №2**. Slowly lift the throttle stick up until the aircraft starts to lift slightly off the ground. Leave the throttle stick in this position and wait a couple of seconds, then land the aircraft as in Exercise №1. Repeat the exercise 5–10 times. + +**Exercise №3**. Raise the throttle stick until the aircraft starts to drift on the ground, wait a second and continue increasing the throttle until the aircraft starts to lift off the ground, wait a second and land the aircraft. To consolidate, repeat the exercises 5–10 times, increasing the number of repetitions if necessary. + +## Working with roll and pitch + +After mastering the throttle control of the copter, it is necessary to learn how to control its horizontal position. The right stick on the remote control is responsible for this. + +Manipulating these axes is intuitive: + +* Stick tilted forward (up) - aircraft moves forward. +* Stick tilted back (down) - aircraft moves backward. +* Stick tilted to the right - aircraft moves to the right. +* Stick tilted to the left - aircraft moves to the left. + +The more the stick is tilted to the side, the more the aircraft will tilt to the side and the faster it moves. + +The main tasks of the exercise: + +1. Flying along the X axis, forward / backward. +2. Flying along the Y axis, left / right. +3. Stabilization of the copter in one place. +4. Flying in a square clockwise and counterclockwise. + +> **Hint** Always stay behind the aircraft with the rear facing towards you, otherwise you may lose control over it by mixing sides. + +As with throttle control, perform [the following steps](#preflight-checks) before flying. + +> **Hint** If the aircraft is spinning strongly around its axis, land it and recalibrate the magnetometer and gyroscope. + +**Exercise №1**. Similar to throttle exercises, raise the throttle stick until the aircraft starts to drift on the ground or bounce a little, then release the throttle stick, leaving it in that position, and raise the pitch stick, first up for a second, then down. The copter will gradually move away from you and then towards you. Repeat the exercise 5–10 times until you feel the copter's responsiveness to the stick movement. + +**Exercise №2**. Raise the throttle stick until the aircraft starts to drift, then leave it and move the roll stick first to the right for a second, then to the left. The aircraft will gradually move first to the right and then to the left. Repeat the exercise 5–10 times until you feel the copter's responsiveness to the stick movement. + +**Exercise №3**. Raise the throttle stick until the aircraft starts to drift, then leave it. Combine the first and second exercises and try to stabilize the aircraft at one point, compensating for its drift with the stick. Hold the aircraft for 50–60 seconds. + +**Exercise №4**. Raise the throttle stick until the aircraft starts to drift, then leave it. When you feel the copter's responsiveness to stick changes, make a "square" shape with a side of 1 m, first clockwise and then counterclockwise. Perform the figures 2–3 times. + +## Air cushion and control in it + +The concept of *air cushion* is very important for all flying vehicles. The air cushion itself is a zone of increased pressure created by the air being forced through the propellers. This area is characterized by turbulence and air currents affecting the flight of the copter. + +Pilots try to avoid flying in an air cushion, but there is a stable area at the boundary where the aircraft can hover at minimum throttle. In this case, it feels like the copter has "sat down" on an air cushion. + +The main feature and advantage of such a flight is that the copter will not change altitude with one throttle value. + +Main tasks: + +1. Stabilization of the copter in one place. +2. Flying in a square. +3. Flying in a circle. + +Similarly to the previous exercises, perform [the following steps](#pre-flight-checks) before take off. + +**Exercise №1**. Raise the throttle stick until the copter flies over the air cushion and is above it (height from floor ~ 25-30 cm, for Clover 4 copter). The aircraft should not climb up or fall down, the flight altitude should stabilize. As in the previous exercise, adjust the X and Y position of the aircraft using the roll and pitch sticks. As a result, the copter should hover at one point with slight wiggle to the sides. Hold the aircraft for 30–40 seconds. + +**Exercise №2**. Raise the aircraft on the air cushion and stabilize it at one point. Next, fly over a square with a side of 1 m, first clockwise, then counterclockwise. Repeat the path 2–3 times in each direction. + +**Exercise №3**. Raise the aircraft on the air cushion and stabilize it at one point. Try to fly a circle with the copter around 1 m in diameter, clockwise and counterclockwise. Repeat the path 2–3 times in each direction. + +## Working with yaw + +In the visual control of multicopter devices, yaw does not play as important role as with fixed wing vehicles, since the copter can move in any direction regardless of where it is directed. + +> **Info** The term *yaw* refers to the rotation of the aircraft around the vertical axis. + +Main tasks: + +1. Rotate the copter, orienting the rear of the copter towards you. +2. Turning around the copter, orienting the rear part towards you. + +It is recommended that you find plenty of free space for the exercises presented. + +Similarly to previous exercises, perform [preflight checks](#preflight-checks) before takeoff. + +**Exercise №1**. Raise the aircraft on the air cushion and stabilize it at one point. Fly a circle around you with the copter, at a distance of 2–3 m, while rotating it so that the back of the copter is always directed towards you. Do the exercise clockwise and counterclockwise. Repeat the exercise 4–5 times. + +**Exercise №2**. Raise the aircraft on the air cushion and stabilize it at one point. Walk around the aircraft while turning it so that the rear is facing you. Walk around the aircraft clockwise and counterclockwise. Repeat the exercise 4–5 times. + +> **Caution** Additional exercises are much more difficult than usual and are not required. Only proceed with them if you are already confidently flying the copter. + +**Additional exercise №1**. Raise the aircraft on the air cushion and stabilize it at one point. Face the aircraft with its front facing you and try to fly it backwards. + +**Additional exercise №2**. Raise the aircraft on the air cushion and stabilize it at one point. Fly so that the front of the aircraft is always facing the direction of the aircraft. + +## Free flight + +If you can complete each of the exercises described above, chances are you already know how to freely take off and fly the aircraft. Some exercises will be presented below to consolidate the acquired skills. + +Exercises: + +* Flying in a vertical square. +* Flying along the sides of the cube. +* Flying in a vertical circle. +* Flight of the eight. +* Ascent of the copter in a spiral. + +Strengthen the acquired skills as many times as necessary for you. diff --git a/docs/ru/flight.md b/docs/ru/flight.md index 64a60205..5f99bd98 100644 --- a/docs/ru/flight.md +++ b/docs/ru/flight.md @@ -2,13 +2,13 @@ Этот раздел объясняет основы управление квадрокоптером с использование пульта радиоуправления в различных режимах (для автономных полетов смотрите раздел "[Программирование](programming.md)"). -## Радиоаппаратура и ее команды +## Основные возможности радиоаппаратуры Прежде чем запускать ваш коптер, необходимо разобраться, как работает пульт радиоуправления ("аппаратура" в общепринятой терминологии авиамоделизма). Управление дроном происходит с помощью двух стиков на аппаратуре. По умолчанию левый стик отвечает за газ и рысканье, а правый за крен и тангаж. Данные термины используются для всех летательных судов, от самолетов до квадрокоптеров. - + * Газ (*throttle*) – отвечает за скорость вращения двигателей. * Рысканье (*yaw*) – отвечает за повороты вокруг вертикальной оси (Z), по часовой (при наклоне вправо) и против часовой (при наклоне влево) стрелки. @@ -17,7 +17,7 @@ Данные описания предполагают, что коптер находится задней частью к пилоту. - + ## Полетные режимы @@ -82,18 +82,20 @@ Прежде чем начинать полет, необходимо перевести коптер в состояние *Armed*. -* Состояние *Armed* – раскручивает моторы на минимальных оборотах, коптер готов к полету. -* Состояние *Disarmed* – моторы не работают, коптер не передает сигналы с пульта на них. +* Состояние *Armed* – моторы вращаются в соответсвии с положением стика газа, коптер готов к полету. +* Состояние *Disarmed* – моторы не вращаются, коптер не реагирует на стик газа. По умолчанию коптер находится в состоянии *Disarmed* и переходит в него в случае если вы долго не взлетаете. Для перевода коптера в состояние *Armed* есть несколько способов: * С помощью стика – переведите левый стик вниз вправо и подождите пару секунд. -* С помощью тумблера – состояния Armed/Disarmed можно настроить на один из тумблеров. Подробнее о настройке в смотрите в статье про [полетные режимы](modes.md). -* С помощью QGC – вы можете заармить ваш дрон программно. Для этого нажмите на надпись *Disarm* в шапке и выберите другое состояние. - + + +* С помощью тумблера – состояния Armed/Disarmed можно настроить на один из тумблеров. Подробнее о настройке в смотрите в статье про [полетные режимы](modes.md). +* С помощью QGC – вы можете заармить ваш дрон программно. Для этого нажмите на надпись *Disarmed* в шапке и выберите другое состояние. +* С помощью [программы](programming.md) - коптер может перейти в состояние *Armed*, если в навигационной команде, такой как `navigate`, `set_position` и т.д., указан параметр `auto_arm=True`. ### Kill switch @@ -101,6 +103,6 @@ > **Caution** Будьте внимательны, *Kill Switch* не переводит коптер в состояние *Disarmed*! -Каждый раз перед отключением *Kill Switch* убеждайтесь, что стик газа находится в нижнем положении и коптер находится в состоянии *Disarmed*. В случае, если стик газа не находится в нижнем положении, при отключении *Kill Switch* на моторы будет подан сигнал соответствующий положению стика в данный момент, что приведет к резкому рывку коптера. +Перед отключением *Kill Switch* убедитесь, что стик газа находится в нижнем положении и коптер находится в состоянии *Disarmed*. В случае, если стик газа не находится в нижнем положении, при отключении *Kill Switch* на моторы будет подан сигнал соответствующий положению стика в данный момент, что приведет к резкому рывку коптера. **Далее**: [Упражнения для управления коптером](flight_exercises.md). diff --git a/docs/ru/flight_exercises.md b/docs/ru/flight_exercises.md index 90992bae..256b8c21 100644 --- a/docs/ru/flight_exercises.md +++ b/docs/ru/flight_exercises.md @@ -14,12 +14,12 @@ Убедитесь, что настроили полетные режимы на один из тумблеров. Для этого переключите тумблер, в разные позиции и убедитесь, что режимы изменяются. -Рекомендуется настроить *Kill Switch*, для его проверки совершите следующие действия: +Рекомендуется настроить *Kill Switch*. Для его проверки совершите следующие действия: * Включите *Kill Switch*, проверьте, что в QGC появилось соответствующее уведомление. * Переведите коптер в состояние *Armed*, а затем включите *Kill Switch*. Убедитесь, что моторы выключились. Затем переключите тумблер *Kill Switch* в изначальное положение. Если коптер автоматически не перешел в состояние *Disarmed* из-за бездействия, моторы снова начнут вращаться. -> **Caution** Переводдите коптер в состояние *Armed* только на полетной зоне. +> **Caution** Переводите коптер в состояние *Armed* только на полетной зоне. Убедитесь, что режимы переключаются удобными для вас тумблерами. В противном случае измените их в соответствии со [статьей по настройке полетных режимов](modes.md). Повторите приведенные действия несколько раз, для того, чтобы запомнить какие тумблеры за что отвечают. @@ -27,13 +27,11 @@ Первым делом необходимо почувствовать отзывчивость коптера на движение стика газа и научиться им управлять. Каждый коптер имеет немного различные запасы мощности и соответственно отрывается от земли при разных положениях стика. -В данном упражнении необходимо использовать только стик газа. Во время выполнения рекомендуется не использовать остальные стики. +В данном упражнении необходимо использовать только стик газа. Во время выполнения упражнения рекомендуется не использовать остальные стики. Основные задания упражнения: -1. Дрейф коптера по земле, без взлета в воздух. -2. Дрейф коптера с "подпрыгиваниями". -3. Дрейф коптера и последующий переход к подпрыгиваниям. +1. Дрейф коптера по земле, не отрываясь от земли. ### Предполетные проверки @@ -44,17 +42,16 @@ 3. Включите коптер путем подключения АКБ. 4. Отойдите на безопасное расстояние. Рекомендуется соблюдать расстояние до коптера минимум 4–5 м. 5. Убедитесь, что коптер находится в режиме *Stabilized*. -6. Переведите коптер в состояние *Armed*. -Не пытайтесь сразу оторвать коптер от земли, найдите минимально возможное положение стика в соответствии с упражнением. В противном случае это может привести к поломкам или травмам. +Не пытайтесь сразу оторвать коптер от земли, найдите минимально возможное положение стика для того, чтобы коптер начал дрейфовать по земле. В противном случае это может привести к поломкам или травмам. -> **Caution** В случае потери контроля над коптером необходимо сразу включать *Kill Switch*. Настоятельно рекомендуется проверять его работу перед каждым взлетом, для наработки мышечной памяти. +> **Caution** В случае потери контроля над коптером необходимо сразу включать *Kill Switch*. -**Упражнение №1**. Медленно поднимайте стик газа вверх, пока коптер не начнет двигаться. В этот момент он начнет медленно дрейфовать по земле. Оставьте стик газа в таком положении и подождите пару секунд, затем переведите стик в изначальное положение, чтобы посадить коптер. После посадки коптера выключите моторы переведя в состояние *Disarmed*. Повторите упражнение 10–15 раз, чтобы лучше чувствовать отзывчивость коптера на стик газа. +**Упражнение №1**. Медленно поднимайте стик газа вверх, пока коптер не начнет двигаться. В этот момент он начнет медленно дрейфовать по земле. Оставьте стик газа в таком положении и подождите пару секунд, затем переведите стик в изначальное положение, чтобы посадить коптер. После посадки коптера выключите моторы переведя в состояние *Disarmed*. Повторите упражнение 5-10 раз, чтобы лучше чувствовать отзывчивость коптера на стик газа. -**Упражнение №2**. Как и в прошлом упражнении, медленно поднимайте стик газа вверх, пока коптер на начнет двигаться по земле. Продолжайте увеличивать газ, пока коптер не начнет немного подлетать, это похоже на небольшие "подпрыгивания". Оставьте стик газа в таком положении и подождите пару секунд, затем посадите коптер аналогично упражнению №1. Повторите упражнение 10-15 раз. +**Упражнение №2**. Медленно поднимайте стик газа вверх, пока коптер на начнет немного отрываться от земли. Оставьте стик газа в таком положении и подождите пару секунд, затем посадите коптер аналогично упражнению №1. Повторите упражнение 10-15 раз. -**Упражнение №2**. Упражнение является совмещением первого и второго. Аналогично с первым упражнением поднимайте стик газа, пока коптер не начнет дрейфовать по земле, подождите секунду и продолжайте его увеличивать до "подпрыгиваний" коптера, снова подождите пару секунд, посадите коптер. Для закрепления повторяйте упражнения 10-15 раз, при необходимости увеличивая количество повторений. +**Упражнение №3**. Поднимайте стик газа, пока коптер не начнет дрейфовать по земле, подождите секунду и продолжайте увеличивать газ до момента, когда коптер начнет отрываться от земли, подождите секунду и посадите коптер. Для закрепления повторяйте упражнения 10-15 раз, при необходимости увеличивая количество повторений. ## Работа с креном и тангажом @@ -67,7 +64,7 @@ * Стик наклонен вправо – коптер движется вправо. * Стик наклонен влево – коптер движется влево. -Чем сильнее стик будет наклонен в сторону, тем быстрее коптер будет двигаться. +Чем сильнее стик будет наклонен в сторону, тем сильнее коптер будет наклоняться в сторону быстрее двигаться. Основные задания упражнения: @@ -86,11 +83,11 @@ **Упражнение №2**. Поднимайте стик газа, пока коптер не начнет дрейфовать, затем оставьте его и перемещайте стик крена сначала вправо, на протяжении секунды, затем влево. При этом коптер будет постепенно перемещаться сначала вправо, а затем влево. Повторите упражнение 5-10 раз, пока не почувствуете отзывчивость коптера на движение стика. -**Упражнение №3**. Поднимайте стик газа, пока коптер не начнет дрейфовать, затем оставьте его. Совместите первое и второе упражнение и постарайтесь стабилизировать коптер в одной точке, компенсируя его дрейф с помощью стика. Удерживайте коптер 50-60 секунд. +**Упражнение №3**. Поднимайте стик газа, пока коптер не начнет дрейфовать, затем оставьте его. Совместите первое и второе упражнение и постарайтесь стабилизировать коптер в одной точке, компенсируя его дрейф с помощью стика. Удерживайте коптер 20-30 секунд. **Упражнение №4**. Поднимайте стик газа, пока коптер не начнет дрейфовать, затем оставьте его. Почувствовав отзывчивость коптера на изменения стиков выполните фигуру "квадрат" со стороной 1 м, сначала по часовой стрелке, а затем против. Выполняйте фигуры по 2-3 раза. -### Воздушная подушка и управление в ней +## Воздушная подушка и управление в ней Понятие *воздушной подушки* очень важно во всей летательной технике. Сама по себе воздушная подушка является зоной повышенного давления, возникающая за счет воздуха пропускаемого через пропеллеры. Данная область харрактеризуется турбелентностями и воздушными потоками влияющими на полет коптера. @@ -106,13 +103,13 @@ Аналогично с предыдущими упражнениями перед взлетом выполните [следующие действия](#предполетные-проверки). -**Упражнение №1**. Поднимайте стик газа, пока коптер не пролетит воздушную подушку и не окажется над ней (высота от пола ~25-30 см, для коптера Клевер 4). Коптер не должен подниматься вверх или проваливаться вниз, высота полета должа стабилизироваться, при этом коптер может покачаваться вверх, вниз с амплитудой 5-7 см. Как и в предыдущем упражнении корректируйте позицию коптера по осям X, Y с помощью стика крена и тангажа. В результате коптер должен зависнуть в одной точке с небольшими покачиваниями по сторонам. Удерживайте коптер 30-40 секунд. +**Упражнение №1**. Поднимайте стик газа, пока коптер не пролетит воздушную подушку и не окажется над ней (высота от пола ~25-30 см, для коптера Клевер 4). Коптер не должен подниматься вверх или проваливаться вниз, высота полета должа стабилизироваться. Как и в предыдущем упражнении корректируйте позицию коптера по осям X, Y с помощью стика крена и тангажа. В результате коптер должен зависнуть в одной точке с небольшими покачиваниями по сторонам. Удерживайте коптер 30-40 секунд. **Упражнение №2**. Поднимите коптер на воздушную подушку и стабилизируйте его в одной точке. Далее пролетите по квадрату со стороной 1 м сначала по часовой стрелке, потом против часовой стрели. Повторите траекторию в каждую сторону 2-3 раза. **Упражнение №3**. Поднимите коптер на воздушную подушку и стабилизируйте его в одной точке. Попробуйте описать коптером круг с диаметром 1 м, по часовой и против часовой стрелки. Повторите траекторию в каждую сторону 2-3 раза. -### Работа с рысканьем +## Работа с рысканьем При визуальном управлении мультикоптерными устройствами, рысканье не играет на столько важной роли, как с самолетной технике, поскольку коптер может передвигаться в любую сторону вне зависимости от того, куда он направлен. @@ -121,7 +118,7 @@ Основные задания: 1. Оборот коптера вокруг себя, ориентируя заднюю часть коптера к себе. -2. Оборот вокруг коптера, ориентируя заднюю часть к себе +2. Оборот вокруг коптера, ориентируя заднюю часть к себе. Для выполнения представленных упражнений рекомендуется найти большое свободное пространство. @@ -133,11 +130,11 @@ > **Caution** Дополнительные упражнения значительно сложнее обычных и не обязательны к выполнению. Приступайте к ним, только если вы уже уверенно управляете коптером. -**Дополнительное упражнение №1**. Поднимите коптер на воздушную подушку и стабилизируйте его в одной точке. Выполняйте полет таким образом, чтобы передняя часть коптера всегда смотрела в сторону его движения. +**Дополнительное упражнение №1**. Поднимите коптер на воздушную подушку и стабилизируйте его в одной точке. Разверните коптер передней частью к себе и пробуйте управлять им задом наперед. -**Дополнительное упражнение №2**. Поднимите коптер на воздушную подушку и стабилизируйте его в одной точке. Разверните коптер передней частью к себе и пробуйте управлять им задом наперед. +**Дополнительное упражнение №2**. Поднимите коптер на воздушную подушку и стабилизируйте его в одной точке. Выполняйте полет таким образом, чтобы передняя часть коптера всегда смотрела в сторону его движения. -### Свободный полет +## Свободный полет Если вы можете выполнить каждое из описанных выше упражнений, скорее всего, вы уже умеете свободно взлетать и управлять коптером. Далее будут представленны некоторые упражнения для закрепления полученных навыков. From 21d922beb25b7a5e1128489b67d4ea3e8705fb7d Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Wed, 2 Sep 2020 16:40:14 +0300 Subject: [PATCH 23/25] simple_offboard: set main_camera_optical reference frame to map --- clover/launch/clover.launch | 1 + 1 file changed, 1 insertion(+) diff --git a/clover/launch/clover.launch b/clover/launch/clover.launch index e1bd7142..196490bc 100644 --- a/clover/launch/clover.launch +++ b/clover/launch/clover.launch @@ -55,6 +55,7 @@ + From c3b549df0daa90ecd5ab95524f362acce5a2ae80 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Thu, 3 Sep 2020 01:17:21 +0300 Subject: [PATCH 24/25] docs: little titles fix --- docs/en/assemble_4_2.md | 2 +- docs/ru/assemble_4_2.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/en/assemble_4_2.md b/docs/en/assemble_4_2.md index 69d9ed51..501de05a 100644 --- a/docs/en/assemble_4_2.md +++ b/docs/en/assemble_4_2.md @@ -1,4 +1,4 @@ -# Clover 4 assembly +# Clover 4.2 assembly ## Fasteners size diff --git a/docs/ru/assemble_4_2.md b/docs/ru/assemble_4_2.md index 9c876e80..0da70371 100644 --- a/docs/ru/assemble_4_2.md +++ b/docs/ru/assemble_4_2.md @@ -1,4 +1,4 @@ -# Сборка Клевера 4 +# Сборка Клевера 4.2 ## Размер крепежа From 4a2fbf3e2218690dc51e85310f27327c2a8c5a99 Mon Sep 17 00:00:00 2001 From: Oleg Kalachev Date: Tue, 8 Sep 2020 17:01:13 +0300 Subject: [PATCH 25/25] docs: minor fixes --- docs/ru/android.md | 4 ++-- docs/ru/programming.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/ru/android.md b/docs/ru/android.md index 72375bc5..9f2f7e42 100644 --- a/docs/ru/android.md +++ b/docs/ru/android.md @@ -1,8 +1,8 @@ - + # Пульт на Android Все владельцы мобильных устройств фирмы *Apple* ещё морозным январем 2018го обзавелись приятным приложением под *iOS* для пилотирования квадрокоптеров с помощью **WiFi**. И вот, спустя год вышло такое же приложение но уже для другой операционной системы. Актуальную версию вы можете скачать [**тут**](https://vk.com/away.php?to=https%3A%2F%2Fplay.google.com%2Fstore%2Fapps%2Fdetails%3Fid%3Dexpress.copter.cleverrc&cc_key=) . - + ## Введение В данной статье я расскажу вам о том, как можно написать свой или доработать уже имеющийся пульт для Андроид своими руками. Для работы будем использовать модный язык *Kotlin*, а в качестве среды разработки возьмем *Android Studio*. Для тех кто ни разу ей не пользовался рекомендую к ознакомлению следующие [*материалы*](https://www.google.com/search?ei=xQxDXMH0C8OOmgW4mYigDQ&q=%D0%A7%D1%82%D0%BE+%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C+%D0%B5%D1%81%D0%BB%D0%B8+%D1%8F+%D0%BD%D0%B5+%D1%83%D0%BC%D0%B5%D1%8E+%D0%BF%D0%B8%D1%81%D0%B0%D1%82%D1%8C+%D0%BF%D0%BE%D0%B4+%D0%B0%D0%BD%D0%B4%D1%80%D0%BE%D0%B8%D0%B4%3F&oq=%D0%A7%D1%82%D0%BE+%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C+%D0%B5%D1%81%D0%BB%D0%B8+%D1%8F+%D0%BD%D0%B5+%D1%83%D0%BC%D0%B5%D1%8E+%D0%BF%D0%B8%D1%81%D0%B0%D1%82%D1%8C+%D0%BF%D0%BE%D0%B4+%D0%B0%D0%BD%D0%B4%D1%80%D0%BE%D0%B8%D0%B4%3F&gs_l=psy-ab.3...4413.17423..17726...9.0..2.442.4577.45j5j1j0j1....2..0....1..gws-wiz.....6..0i71j35i39j0i131j0j0i67j0i131i67j0i22i30j33i22i29i30j33i21j33i160.0bZz-WGxoHY). Весь код приложения можно найти [**тут**](https://github.com/Tennessium/android). Если вы хотите сразу получить приложение с целью дальнейшей доработки, выполните следующую команду: diff --git a/docs/ru/programming.md b/docs/ru/programming.md index 995f133e..8e13274c 100644 --- a/docs/ru/programming.md +++ b/docs/ru/programming.md @@ -10,7 +10,7 @@ ## Система позиционирования {#positioning} -Для того, чтобы дрон мог зависать на месте или летать между точками, необходимо использование система позиционирования. Такая система должна вычислять и сообщать дрону, где он находится. Клевер предполагает использование нескольких систем позиционирования: [optical flow](optical_flow.md) (используется [камера](camera.md) и [лазерный дальномер](laser.md)), [визуальные маркеры](aruco.md) (используется камера и маркеры, наклеенные на пол или потолок), GPS и других. +Для того, чтобы дрон мог зависать на месте или летать между точками, необходимо использование системы позиционирования. Такая система должна вычислять и сообщать дрону, где он находится. Клевер предполагает использование нескольких систем позиционирования: [optical flow](optical_flow.md) (используется [камера](camera.md) и [лазерный дальномер](laser.md)), [визуальные маркеры](aruco.md) (используется камера и маркеры, наклеенные на пол или потолок), GPS и других. ### Optical flow