mirror of
https://github.com/CopterExpress/clover.git
synced 2026-05-27 13:39:33 +00:00
* Clover Blockly: add first blocks set * Adjust Blockly settings * Fix get_position output type * Add screenshot * Rename readme.md to README.md * Resize screenshot * Add package.xml * Little change * Fixes * Add python_compressed to blockly * Implement some of the Clover blocks in Python * Make Python indentation 4 spaces * Fixes to Python blocks implementation * Implement set_velocity block in Python * Implement wait_arrival block in Python * Fix indentation in Python implementation of blocks * Fix * Fix land_wait template * Set reserved words in Python * Change default frame_id to aruco_map in get_position block * Fix * Move blocks definitions to blocks.js * Get rid of missing favicon error * Simplify navigate * Rearrange layout, add tabs * Generate Python code * Small style change * -console.log * Code style * Use modules * Move modules to the header * Correct order for ROS definitions + generating "backend" code * Fix rangefinder_distance block * simple_offboard: commands to change only yaw and yaw rate * Implement set_yaw block * Start working on Blockly documentation * Implement print block with a topic * Unneeded code * Little fixes * Fix indentation * Fixes * Fix wait_arival, get_distance * Implement running Blockly programs, implement prompt block, fixes * Add land button * Little change * Fix reserved words + little fixes * +x for main.py * Simplify run button * Auto-save and load workspace * Make land button work * Handle exceptions * Minor change * Add help URL for blocks * Fix * Implement arrived block * Mark blockly and highlight.js as linguist-vendored * Add forgotten CMakeLists.txt * Add wait checkbox to set_yaw block * Disable run button when disconnected * Add message and service files * Add some comments * Add tooltip to some blocks * Implement GPIO blocks * Don’t latch print message to prevent duplication * Prevent duplication prompts * Add ROS init code to backend code anyways * Make GPIO blocks color a constant * Minor fix * More correctly update blocks on input value changes * Minor fixes * Remove unneeded readonly attribute * Add marker ID shadow blocks to toolbox * Add lacking reserved words * Fix frame id generation for complex marker id expressions * Consider frame_id in set_yaw block * Shorten ros module import * Implement stop service * Disable and enable run button correctly * Don’t print KeyboardInterrupt exceptions * Put notifications to notifications element * Add 'running' mark * Disable signal in backend python code * Sleep a little bit to let rospy initialize publishers * Remove accidental code * Make ROS namespace and private namespace constants * editorconfig-lint: don’t check Blockly code * Use private namespace constant in Python generator * Implement ~running topic to display current program status more robustly * Make navigate tolerance and sleep time constants * Make set_leds and and set_effect services proxies persistent * Replace a number with constant * Limit ~block topic publishing rate Otherwise messages get queued making the frontend to freeze * Improve internal documentation * Append 'map' to frames list * Return degrees in get_attitude block * Move getting yaw in a separate block * Improve block tooltips * Add some more files to editorconfig-lint excludes * Add get_yaw block to toolbox * Implement get_time block * Implement ~store and ~load services for storing user programs * Set auto_arm only in take_off block * Minor CSS fixes * Make 'Python' tab textarea-like * Implement saving and loading programs * Adjust styles * Retrieve only .xml files in load service * Forgotten code * Documentation on store and load services * Add some examples * Add blocks programming arg to launch file * Update docs * Add package’s dependencies * Add dependency * Add title to select * Fix syntax * Minor fix in docs * Add forgotten roslib.js * Run user program in the same process * Use print function for print block in Python 2 * Add variables example * Fix url * Add functions example * Fix set_servo block * Fix gpio_read block * Update blocks screenshot * Update docs * Update docs * Fix set_effect block * Minor fix in example * Add setpoint block, remove set_velocity from toolbox * Remove unused modules * Unused variable * Add English article skeleton * Clarify backend node link error * Remove unused variable * Update documentation * Fix link to documentation * Add Blockly logo * Update English article * Add Blocks programming link to the main page * Minor change * Add catkin_install_python to CMakeLists.txt * Make navigate tolerance and sleep time configurable * Add minor todo * Add blockly examples directory to editorconfig-lint excludes * Rename main node to clover_blocks * Add a warning to the old blocks programming article * Fix editorconfig-lint exclude
111 lines
7.7 KiB
Markdown
111 lines
7.7 KiB
Markdown
# Блочное программирование Клевера
|
||
|
||
<img src="../assets/blocks/blockly.svg" width=200 align="right">
|
||
|
||
Возможность блочного визуального программирования автономных полетов Клевера добавлена в [образ для RPi](image.md), начиная с версии **0.21**. Реализация блочного программирования основана на [Google Blockly](https://developers.google.com/blockly). Интеграция Blockly в Клевер позволяет понизить входной порог в программирование автономных полетов до минимального уровня.
|
||
|
||
## Конфигурация
|
||
|
||
Для корректной работы работы блочного программирования аргумент `blocks` в launch-файле Клевера (`~/catkin_ws/src/clover/clover/launch/clover.launch`) [должен быть в значении](cli.md#editing) `true`:
|
||
|
||
```xml
|
||
<arg name="blocks" default="true"/>
|
||
```
|
||
|
||
## Запуск
|
||
|
||
Для того, чтобы открыть интерфейс блочного программирования в Клевере, [подключитесь к Клеверу по Wi-Fi](wifi.md) и перейдите на страницу http://192.168.11.1:8080/clover_blocks/ либо нажмите ссылку *Blocks programming* на [основной веб-странице Клевера](wifi.md#веб-интерфейс).
|
||
|
||
Интерфейс выглядит следующим образом:
|
||
|
||
<img src="../assets/blocks/blocks.png" width=600>
|
||
|
||
Соберите необходимую программу из блоков в меню слева а затем нажмите кнопку *Run* для ее запуска. Также вы можете просмотреть сгенерированный код на языке Python, переключившись во вкладку *Python*.
|
||
|
||
Кнопка *Stop* позволяет остановить программу. Нажатие кнопки *Land* также останавливает программу и сажает дрон.
|
||
|
||
## Сохранение и загрузка
|
||
|
||
<img src="../assets/blocks/save.png" width=300 align=right>
|
||
|
||
Для сохранения программы откройте меню справа сверху, выберите пункт меню *Save* и введите название программы. Название программы может содержать только латинские буквы, дефис, подчеркивание и точку. Все ранее сохраненные программы будут доступны в этом же меню.
|
||
|
||
На карте памяти сохраненные XML-файлы программ хранятся в каталоге `/catkin_ws/src/clover/clover_blocks/programs/`.
|
||
|
||
В этом же меню доступны примеры программ (подкаталог `examples`).
|
||
|
||
## Блоки
|
||
|
||
Набор блоков приблизительно аналогичен набору ROS-сервисов [API автономных полетов Клевера](simple_offboard.md). В этом разделе приведено описание некоторых из них.
|
||
|
||
Блоки Клевера поделены на 4 категории:
|
||
|
||
* <span style="padding:2px;color:white;background:#9d5ca6">Flight</span> – команды, имеющие отношение к полету.
|
||
* <span style="padding:2px;color:white;background:#ff9b00">State</span> – блоки, позволяющие получить те или иные параметры текущего состояния коптера.
|
||
* <span style="padding:2px;color:white;background:#01d754">LED</span> – блоки для управления [LED-лентой](leds.md).
|
||
* <span style="padding:2px;color:white;background:#5b97cc">GPIO</span> – блоки для работы с [GPIO-пинами](gpio.md).
|
||
|
||
В остальных категориях находятся стандартные блоки Google Blockly.
|
||
|
||
### take_off
|
||
|
||
<img src="../assets/blocks/take-off.png" srcset="../assets/blocks/take-off.png 2x">
|
||
|
||
Взлететь на указанную высоту в метрах. Высота может быть произвольным блоком, возвращающим числовое значение.
|
||
|
||
Флаг `wait` определяет, должен ли дрон ожидать окончания взлета перед выполнением следующего блока.
|
||
|
||
### navigate
|
||
|
||
<img src="../assets/blocks/navigate.png" srcset="../assets/blocks/navigate.png 2x">
|
||
|
||
Прилететь в заданную точку. Координаты точки задаются в метрах.
|
||
|
||
Флаг `wait` определяет, должен ли дрон ожидать завершения полета в точку перед выполнением следующего блока.
|
||
|
||
#### Поле *relative to* {#relative_to}
|
||
|
||
В блоке может быть выбрана [система координат](frames.md), в которой задана целевая точка:
|
||
|
||
* *body* – координаты относительно коптера: вперед (*forward*), влево (*left*), вверх (*up*).
|
||
* *markers map* – система координат, связанная с [картой ArUco-маркеров](aruco_map.md).
|
||
* *marker* – система координта, связанная с [ArUco-маркером](aruco_marker.md); появляется поле для ввода ID маркеа.
|
||
* *last navigate target* – координаты относительно последней заданной точки для навигации.
|
||
* *map* – локальная система координат коптера, связана с местом его инициализации.
|
||
|
||
### land
|
||
|
||
<img src="../assets/blocks/land.png" srcset="../assets/blocks/land.png 2x">
|
||
|
||
Произвести посадку.
|
||
|
||
Флаг `wait` определяет, должен ли дрон ожидать окончания посадки перед выполнением следующего блока.
|
||
|
||
### wait
|
||
|
||
<img src="../assets/blocks/wait.png" srcset="../assets/blocks/wait.png 2x">
|
||
|
||
Ожидать заданное время в секундах. Время ожидания может быть произвольным блоком, возвращающим числовое значение.
|
||
|
||
### wait_arrival
|
||
|
||
<img src="../assets/blocks/wait-arrival.png" srcset="../assets/blocks/wait-arrival.png 2x">
|
||
|
||
Ожидать, пока дрон долетит до целевой точки (заданной в [navigate](#navigate)-блоке).
|
||
|
||
### get_position
|
||
|
||
<img src="../assets/blocks/get-position.png" srcset="../assets/blocks/get-position.png 2x">
|
||
|
||
Блок позволяет получить позицию, скорость и угол по рысканью дрона в заданной [системе координат](#relative_to).
|
||
|
||
### set_effect
|
||
|
||
<img src="../assets/blocks/set-effect.png" srcset="../assets/blocks/set-effect.png 2x">
|
||
|
||
Блок позволяет устанавливать различные анимации на LED-ленту аналогично [ROS-сервису `set_effect`](leds.md#set_effect).
|
||
|
||
Пример использования блока для установки случайного цвета (блоки, связанные с цветами находятся в категории *Colour*):
|
||
|
||
<img src="../assets/blocks/random-color.png" srcset="../assets/blocks/random-color.png 2x">
|