# Полет по квадрату

Мы уже знаем как строить простую программу для полета. Если забыли - вернитесь на предыдущий раздел.

Сейчас мы сделаем программу "Полет по квадрату".

Cоздадим файл с расширением **.py:**

![](/files/-MdqnHwP_g1ss6NJcJV4)

{% hint style="info" %}
Чтобы открыть папку мы прописали: cd proga, где cd - это команда, позволяющая открывать папки, а proga - название папки.
{% endhint %}

{% hint style="info" %}
Чтобы открыть файл мы прописали: nano proga.py, где nano - это команда, позволяющая открывать файлы, а proga.py - название файла. Если файла не существует, тогда он автоматически будет создан.&#x20;
{% endhint %}

3\. Перед нами откроется редактор с пустым файлом:

![](/files/-MdqoGBd9j44g4_wd-VK)

4\.  Вставим в нашу программу первые строчки, которые будут импортировать необходимые модули и сервисы. Они обеспечат работу всех функций, которые мы будем использовать.&#x20;

{% hint style="success" %}
На соревнованиях можно будет пользоваться официальным гитбуком COEX. Поэтому я буду специально вставлять только картинки без фотографий, чтобы вы могли самостоятельно найти нужную ссылку на официальном гитбуке: [https://clover.coex.tech/ru/](https://vk.com/away.php?to=https%3A%2F%2Fclover.coex.tech%2Fru%2F\&cc_key=).
{% endhint %}

![](/files/-Mdqoi5KtMZjDR9-fxFI)

В результате должны получить это:

![](/files/-MdqolwOJPSvdbfcHYA8)

Теперь мы можем, используя модули и сервисы, объявить функцию полета.

Вставим функцию **взлета**:

![](/files/-Mdqp6DLg6qK30gm9evs)

Добавим задержку (время выполнения программы). Объявляется как **rospy.sleep(4)**. Где вместо 4 можно написать любое натуральное число. Это натуральное число обозначает сколько секунд будет происходить работа этой функции.

В результате программа взлета будет выглядеть следующим образом:

![](/files/-MdqpDGhPPsylDAtZ8gf)

{% hint style="info" %}
Отлично, с такой программой у нас квадрокоптер может взлететь.&#x20;
{% endhint %}

Теперь добавим полет в точку с некоторой координатой. Для этого используем следующую строчку:

Обратите внимание на параметр **frame\_id='body'.** Этот параметр определяет систему координат, относительно которой позиционируется квадрокоптер.

{% hint style="info" %}
ВЗЛЕТ ВСЕГДА ОСУЩЕСТВЛЯЕТСЯ С СИСТЕМОЙ КООРДИНАТ **frame\_id='body'**
{% endhint %}

Давайте рассмотрим основные системы координат:

* `aruco_map` — координаты относительно нулевой arucо метки (как правило, она располагается в левом нижнем углу);
* `body` — координаты относительно квадрокоптера;
* `navigate_target` – координаты точки, в которую сейчас летит дрон (с использованием [navigate](https://clover.coex.tech/ru/simple_offboard.html#navigate));
* `aruco_N` — координаты относительно aruco метки под номером N

Рассмотрим каждый по отдельности:

Создадим полет по прямой, используя различные виды системы координат

1. '**body'**

![](/files/TCUqqapRsQwa85RWEBKv)

Обратим внимание на эти строчки:

```
navigate(x=0, y=5, z=1, speed=0.5, frame_id='body')
rospy.sleep(3)
```

Используя, имеющиеся знания создадим программу полета по прямой, вдоль оси Y на расстояние 5 метров. Здесь прекрасно видно, что квадрокоптер перемещается по оси Y на 5 метров со скоростью 0.5 м/с. Получается, что за 1 метр пролета пройдет 2 секунды. За 5 метров - 10 секунд. Однако, мы указали всего 3 секунды на полет.&#x20;

Давайте запустим программу.

Как видите, как тол ко проходит 3 секунды - квадрокоптер садится. Получается, он 5 метров не пролетел.

2\. **'aruco\_map'**

![](/files/tUnWsxz1EfL8YDW0bWNA)


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://lahmeneffa.gitbook.io/docs-tkuik/programmirovanie-poletov/programmirovanie-poleta/polet-po-kvadratu.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
