docs: spelling

This commit is contained in:
Oleg Kalachev
2019-02-23 10:14:12 +03:00
parent 8b034dc813
commit 4775919808
23 changed files with 282 additions and 279 deletions

View File

@@ -4,7 +4,7 @@
Основной туториал по rosserial: http://wiki.ros.org/rosserial_arduino/Tutorials
Arudino необходимо установить на Клевер и подключить по USB-порту.
Arduino необходимо установить на Клевер и подключить по USB-порту.
## Настройка Arduino IDE
@@ -14,7 +14,7 @@ Arudino необходимо установить на Клевер и подк
rosrun rosserial_arduino make_libraries.py .
```
Полученный каталог `ros_lib` необходимо скопировать в `<папку скетчей>/libraries` на компьютере с Arudino IDE.
Полученный каталог `ros_lib` необходимо скопировать в `<папку скетчей>/libraries` на компьютере с Arduino IDE.
## Настройка Raspberry Pi
@@ -49,7 +49,7 @@ while(/* условие */) {
}
```
Для огранизации долгих задержек используйте задержки в цикле с периодическим вызовом функции `hn.spinOnce()`:
Для организации долгих задержек используйте задержки в цикле с периодическим вызовом функции `hn.spinOnce()`:
```cpp
// Задержка на 8 секунд
@@ -202,7 +202,7 @@ getTelemetry.call(gt_req, gt_res);
## Проблемы
При использовании Arudino Nano может не хватать оперативной памяти (RAM). В таком случае в Aruino IDE будут появляться сообщения, типа:
При использовании Arduino Nano может не хватать оперативной памяти (RAM). В таком случае в Arduino IDE будут появляться сообщения, типа:
```
Глобальные переменные используют 1837 байт (89%) динамической памяти, оставляя 211 байт для локальных переменных. Максимум: 2048 байт.

View File

@@ -3,7 +3,7 @@
> **Note** Документация для версий [образа](microsd_images.md), начиная с **0.15**. Для более ранних версий см. [документацию для версии **0.14**](https://github.com/CopterExpress/clever/blob/v0.14/docs/ru/aruco.md).
[ArUco-маркеры](https://docs.opencv.org/3.2.0/d5/dae/tutorial_aruco_detection.html) — это популярная технология для позиционирования
роботехнических систем с использованием компьютерного зрения.
робототехнических систем с использованием компьютерного зрения.
Пример ArUco-маркеров:
@@ -61,7 +61,7 @@ sudo systemctl restart clever
<!-- длина стороны маркера в метрах -->
<param name="markers_side" value="0.3362"/>
<!-- растояние между маркерами -->
<!-- расстояние между маркерами -->
<param name="markers_sep" value="0.46"/>
</node>
```
@@ -90,7 +90,7 @@ sudo systemctl restart clever
При полетах необходимо убедиться, что наклеенные на пол метки соответствуют карте.
В топике `aruco_pose/debug` \([http://192.168.11.1:8080/snapshot?topic=/aruco\_pose/debug](http://192.168.11.1:8080/snapshot?topic=/aruco_pose/debug)\) доступен текущий результат распознования меток:
В топике `aruco_pose/debug` \([http://192.168.11.1:8080/snapshot?topic=/aruco\_pose/debug](http://192.168.11.1:8080/snapshot?topic=/aruco_pose/debug)\) доступен текущий результат распознавания меток:
TODO
@@ -104,9 +104,9 @@ TODO
_Примечание_: указанное выше определение приведено для ситуации, когда поле маркеров лежит на полу.
Таким образом, нулевой является левая нижня точка маркерного поля. Угол по рысканью считается равным 0, когда коптер смотрит направо \(по оси x\).
Таким образом, нулевой является левая нижняя точка маркерного поля. Угол по рысканью считается равным 0, когда коптер смотрит направо \(по оси x\).
![Система координат макеров](../assets/aruco-frame.png)
![Система координат маркеров](../assets/aruco-frame.png)
### Настройка полетного контролера

View File

@@ -1,227 +1,227 @@
# Калибровка камеры
Компьютерное зрение получает все более широкое распространение. Зачастую, алгоритмы компьютерного зрения работают неточно, получая искаженное изображение с камеры, что особенно характерно для fisheye-камер.
![img](../assets/img1.jpg)
> Изображение "скруглено" ближе к краям.
Какой-либо алгоритм компьютерного зрения будет воспринимать информацию с этой картинки неправильно. Для устранения подобных искажений камера, получающая изображения, должна быть откалибрована в соответствии со своими особенностями.
## Установка скрипта
Для начала, необходимо установить необходимые библиотеки:
```
pip install numpy
pip install opencv-python
pip install glob
pip install pyyaml
pip install urllib.request
```
Затем скачиваем скрипт из репозитория:
```bash
git clone https://github.com/tinderad/clever_cam_calibration.git
```
Переходим в скачанную папку и устанавливаем скрипт:
```bash
cd clever_cam_calibration
sudo python setup.py build
sudo python setup.py install
```
Если вы используете Windows, тогда скачайте архив из [репозитория](https://github.com/tinderad/clever_cam_calibration/archive/master.zip), распакуйте его и установите:
```bash
cd path\to\archive\clever_cam_calibration\
python setup.py build
python setup.py install
```
> path\to\archive - путь до распакованного архива.
## Подготовка к калибровке
Вам необходимо подготовить калибровочную мишень. Она представляет собой «шахматную доску». Файл можно взять [отсюда](https://www.oreilly.com/library/view/learning-opencv-3/9781491937983/assets/lcv3_ac01.png).
Наклейте распечатанную мишень на любую твердую поверхность. Посчитайте количество пересечений в длину и в ширину доски, измерьте размер клетки (в мм).
![img](../assets/chessboard.jpg)
Включите Клевер и подключитесь к его Wifi.
> Перейдите на 192.168.11.1:8080 и проверьте, получает ли компьютер изображения из топика image_raw.
## Калибровка
Запустите скрипт **_calibrate_cam_**:
**Windows:**
```bash
>path\to\python\Scripts\calibrate_cam.exe
```
> path\to\Python - путь до директории Python
**Linux:**
```bash
>calibrate_cam
```
Задайте параметры доски:
```bash
>calibrate_cam
Chessboard width: # Перекрестий в ширину
Chessboard height: # Перекрестий в длину
Square size: # Длина ребра клетки (в мм)
Saving mode (YES - on): # Режим сохранения
```
> Режим сохранения: если включен, то все полученные фотографии будут сохраняться в нынешней директории.
Скрипт начнет свою работу:
...
Calibration started!
Commands:
help, catch (key: Enter), delete, restart, stop, finish
Чтобы откалибровать камеру, вам требуется сделать как минимум 25 фото шахматной доски с различных ракурсов.
![img](../assets/calibration.jpg)
Чтобы сделать фото, введите команду **_catch_**.
```bash
>catch
```
Программа будет информировать вас о состоянии калибровки.
```bash
...
Chessboard not found, now 0 (25 required)
> # Enter
---
Image added, now 1 (25 required)
```
> Вместо того, чтобы каждый раз вводить команду **_catch_**, Вы можете просто нажимать клавишу **_Enter_** (вводить пустую строку).
После того, как будет набрано достаточное количество изображений, введите команду **_finish_**.
```bash
...
>finish
Calibration successful!
```
**Калибровка по существующим изображениям:**
Если же у вас уже есть изображения, то вы можете откалибровать камеру по ним при помощи скрипта **_calibrate_cam_ex_**.
```bash
>calibrate_cam_ex
```
Указываем характеристики мишени, а так же путь до папки с изображениями:
```bash
>calibrate_cam_ex
Chessboard width: # Перекрестий в ширину
Chessboard height: # Перекрестий в длину
Square size: # Длина ребра клетки (в мм)
Path: # Путь до папки с изображениями
```
В остальном этот скрипт работает аналогично **_calibrate_cam_**.
Программа обработает все полученные фотографии, и создаст файл **_camera_info_****_._****_yaml_** в нынешней директории. При помощи этого файла можно будет выравнивать искажения на изображениях, полученных с этой камеры.
> Если вы поменяете разрешение получаемого изображения, вам нужно будет снова калибровать камеру.
## Исправление искажений
За получение исправленного изображения отвечает функция **_get_undistorted_image(cv2_image, camera_info)_**:
* **_cv2_image_**: Закодированное в массив cv2 изображение.
* **_camera_****_­__****_info_**: Путь до файла калибровки.
Функция возвращает массив cv2, в котором закодировано исправленное изображение.
> Если вы используете fisheye-камеру, поставляемую вместе с Клевером, то для обработки изображений разрешением 320x240 или 640x480 вы можете использовать уже существующие параметры калибровки. Для этого в качестве аргумента **_camera_info_** передайте параметры **_clever_cam_calibration.clevercamcalib.CLEVER_FISHEYE_CAM_320_** или **_clever_cam_calibration.clevercamcalib.CLEVER_FISHEYE_CAM_640_** соответственно.
## Примеры работы
Изначальные изображения:
![img](../assets/img1.jpg)
![img](../assets/img2.jpg)
Иcправленные изображения:
![img](../assets/calibresult.jpg)
![img](../assets/calibresult1.jpg)
## Пример использования
**Обработка потока изображений с камеры**.
Данная программа получает изображения с камеры Клевера и выводит их на экран в исправленном виде, используя существующий калибровочный файл.
```python
import clevercamcalib.clevercamcalib as ccc
import cv2
import urllib.request
import numpy as np
while True:
req = urllib.request.urlopen('http://192.168.11.1:8080/snapshot?topic=/main_camera/image_raw')
arr = np.asarray(bytearray(req.read()), dtype=np.uint8)
image = cv2.imdecode(arr, -1)
undistorted_img = ccc.get_undistorted_image(image, ccc.CLEVER_FISHEYE_CAM_640)
cv2.imshow("undistort", undistorted_img)
cv2.waitKey(33)
cv2.destroyAllWindows()
```
## Использование для ArUco
Чтобы применить параметры калибровки к системе ArUco-навигации, требуется перенести калибровочный .yaml файл на Raspberry Pi Клевера и инициализировать его.
> Не забудьте подключиться к WiFI Клевера.
Для передачи файла используется протокол SFTP. В данном примере используется программа WinSCP.
Подключимся к Raspberry Pi по SFTP:
> Пароль: _**raspberry**_
![img](../assets/wcp1.png)
Нажимаем “Войти”. Переходим в _**/home/pi/catkin_ws/src/clever/clever/camera_info/**_ и копируем туда калибровочный .yaml файл:
![img](../assets/wcp2.jpg)
Теперь мы должны выбрать этот файл в конфигурации ArUco. Для этого используется связь по протоколу SSH. В данном примере используется программа PuTTY.
Подключимся к Raspberry Pi по SSH:
![img](../assets/pty1.jpg)
Войдем под логином _**pi**_ и паролем _**raspberry**_, перейдем в директорию _**/home/pi/catkin_ws/src/clever/clever/launch**_ и начнем редактировать конфигурацию _**main_camera.launch**_:
![img](../assets/pty2.jpg)
В строке _**camera node**_ заменим параметр _**camera_info**_ на _**camera_info.yaml**_:
![img](../assets/pty3.jpg)
> Не забудьте изменить разрешение камеры.
# Калибровка камеры
Компьютерное зрение получает все более широкое распространение. Зачастую, алгоритмы компьютерного зрения работают неточно, получая искаженное изображение с камеры, что особенно характерно для fisheye-камер.
![img](../assets/img1.jpg)
> Изображение "скруглено" ближе к краям.
Какой-либо алгоритм компьютерного зрения будет воспринимать информацию с этой картинки неправильно. Для устранения подобных искажений камера, получающая изображения, должна быть откалибрована в соответствии со своими особенностями.
## Установка скрипта
Для начала, необходимо установить необходимые библиотеки:
```
pip install numpy
pip install opencv-python
pip install glob
pip install pyyaml
pip install urllib.request
```
Затем скачиваем скрипт из репозитория:
```bash
git clone https://github.com/tinderad/clever_cam_calibration.git
```
Переходим в скачанную папку и устанавливаем скрипт:
```bash
cd clever_cam_calibration
sudo python setup.py build
sudo python setup.py install
```
Если вы используете Windows, тогда скачайте архив из [репозитория](https://github.com/tinderad/clever_cam_calibration/archive/master.zip), распакуйте его и установите:
```bash
cd path\to\archive\clever_cam_calibration\
python setup.py build
python setup.py install
```
> path\to\archive - путь до распакованного архива.
## Подготовка к калибровке
Вам необходимо подготовить калибровочную мишень. Она представляет собой «шахматную доску». Файл можно взять [отсюда](https://www.oreilly.com/library/view/learning-opencv-3/9781491937983/assets/lcv3_ac01.png).
Наклейте распечатанную мишень на любую твердую поверхность. Посчитайте количество пересечений в длину и в ширину доски, измерьте размер клетки (в мм).
![img](../assets/chessboard.jpg)
Включите Клевер и подключитесь к его Wi-Fi.
> Перейдите на 192.168.11.1:8080 и проверьте, получает ли компьютер изображения из топика image_raw.
## Калибровка
Запустите скрипт **_calibrate_cam_**:
**Windows:**
```bash
>path\to\python\Scripts\calibrate_cam.exe
```
> path\to\Python - путь до директории Python
**Linux:**
```bash
>calibrate_cam
```
Задайте параметры доски:
```bash
>calibrate_cam
Chessboard width: # Перекрестий в ширину
Chessboard height: # Перекрестий в длину
Square size: # Длина ребра клетки (в мм)
Saving mode (YES - on): # Режим сохранения
```
> Режим сохранения: если включен, то все полученные фотографии будут сохраняться в нынешней директории.
Скрипт начнет свою работу:
...
Calibration started!
Commands:
help, catch (key: Enter), delete, restart, stop, finish
Чтобы откалибровать камеру, вам требуется сделать как минимум 25 фото шахматной доски с различных ракурсов.
![img](../assets/calibration.jpg)
Чтобы сделать фото, введите команду **_catch_**.
```bash
>catch
```
Программа будет информировать вас о состоянии калибровки.
```bash
...
Chessboard not found, now 0 (25 required)
> # Enter
---
Image added, now 1 (25 required)
```
> Вместо того, чтобы каждый раз вводить команду **_catch_**, Вы можете просто нажимать клавишу **_Enter_** (вводить пустую строку).
После того, как будет набрано достаточное количество изображений, введите команду **_finish_**.
```bash
...
>finish
Calibration successful!
```
**Калибровка по существующим изображениям:**
Если же у вас уже есть изображения, то вы можете откалибровать камеру по ним при помощи скрипта **_calibrate_cam_ex_**.
```bash
>calibrate_cam_ex
```
Указываем характеристики мишени, а так же путь до папки с изображениями:
```bash
>calibrate_cam_ex
Chessboard width: # Перекрестий в ширину
Chessboard height: # Перекрестий в длину
Square size: # Длина ребра клетки (в мм)
Path: # Путь до папки с изображениями
```
В остальном этот скрипт работает аналогично **_calibrate_cam_**.
Программа обработает все полученные фотографии, и создаст файл **_camera_info_****_._****_yaml_** в нынешней директории. При помощи этого файла можно будет выравнивать искажения на изображениях, полученных с этой камеры.
> Если вы поменяете разрешение получаемого изображения, вам нужно будет снова калибровать камеру.
## Исправление искажений
За получение исправленного изображения отвечает функция **_get_undistorted_image(cv2_image, camera_info)_**:
* **_cv2_image_**: Закодированное в массив cv2 изображение.
* **_camera_****_­__****_info_**: Путь до файла калибровки.
Функция возвращает массив cv2, в котором закодировано исправленное изображение.
> Если вы используете fisheye-камеру, поставляемую вместе с Клевером, то для обработки изображений разрешением 320x240 или 640x480 вы можете использовать уже существующие параметры калибровки. Для этого в качестве аргумента **_camera_info_** передайте параметры **_clever_cam_calibration.clevercamcalib.CLEVER_FISHEYE_CAM_320_** или **_clever_cam_calibration.clevercamcalib.CLEVER_FISHEYE_CAM_640_** соответственно.
## Примеры работы
Изначальные изображения:
![img](../assets/img1.jpg)
![img](../assets/img2.jpg)
Иcправленные изображения:
![img](../assets/calibresult.jpg)
![img](../assets/calibresult1.jpg)
## Пример использования
**Обработка потока изображений с камеры**.
Данная программа получает изображения с камеры Клевера и выводит их на экран в исправленном виде, используя существующий калибровочный файл.
```python
import clevercamcalib.clevercamcalib as ccc
import cv2
import urllib.request
import numpy as np
while True:
req = urllib.request.urlopen('http://192.168.11.1:8080/snapshot?topic=/main_camera/image_raw')
arr = np.asarray(bytearray(req.read()), dtype=np.uint8)
image = cv2.imdecode(arr, -1)
undistorted_img = ccc.get_undistorted_image(image, ccc.CLEVER_FISHEYE_CAM_640)
cv2.imshow("undistort", undistorted_img)
cv2.waitKey(33)
cv2.destroyAllWindows()
```
## Использование для ArUco
Чтобы применить параметры калибровки к системе ArUco-навигации, требуется перенести калибровочный .yaml файл на Raspberry Pi Клевера и инициализировать его.
> Не забудьте подключиться к WiFI Клевера.
Для передачи файла используется протокол SFTP. В данном примере используется программа WinSCP.
Подключимся к Raspberry Pi по SFTP:
> Пароль: _**raspberry**_
![img](../assets/wcp1.png)
Нажимаем “Войти”. Переходим в _**/home/pi/catkin_ws/src/clever/clever/camera_info/**_ и копируем туда калибровочный .yaml файл:
![img](../assets/wcp2.jpg)
Теперь мы должны выбрать этот файл в конфигурации ArUco. Для этого используется связь по протоколу SSH. В данном примере используется программа PuTTY.
Подключимся к Raspberry Pi по SSH:
![img](../assets/pty1.jpg)
Войдем под логином _**pi**_ и паролем _**raspberry**_, перейдем в директорию _**/home/pi/catkin_ws/src/clever/clever/launch**_ и начнем редактировать конфигурацию _**main_camera.launch**_:
![img](../assets/pty2.jpg)
В строке _**camera node**_ заменим параметр _**camera_info**_ на _**camera_info.yaml**_:
![img](../assets/pty3.jpg)
> Не забудьте изменить разрешение камеры.

View File

@@ -44,7 +44,7 @@ raspistill -o test-image.jpg
Основная статья: http://wiki.ros.org/cv_bridge/Tutorials/ConvertingBetweenROSImagesAndOpenCVImagesPython.
Пример создания подписчика на топик с изображением с основной камеры для обрабоки с использованием OpenCV:
Пример создания подписчика на топик с изображением с основной камеры для обработки с использованием OpenCV:
```python
import rospy
@@ -84,7 +84,7 @@ image_pub.publish(bridge.cv2_to_imgmsg(cv_image, 'bgr8'))
> **Hint** Для высокоскоростного распознавания и позиционирования лучше использовать [ArUco-маркеры](aruco.md).
Для программирования различных действий коптера при детектировании нужных [QR-кодов](https://ru.wikipedia.org/wiki/QR-код) можно использовать бибилиотеку [ZBar](http://zbar.sourceforge.net). Ее нужно установить в помощью pip:
Для программирования различных действий коптера при детектировании нужных [QR-кодов](https://ru.wikipedia.org/wiki/QR-код) можно использовать библиотеку [ZBar](http://zbar.sourceforge.net). Ее нужно установить в помощью pip:
```bash
sudo pip install zbar

View File

@@ -8,7 +8,7 @@
## T-plug
Аналог XT-60. Имеет различные вариации для упрозщения разъединения.
Аналог XT-60. Имеет различные вариации для упрощения разъединения.
<img src="../assets/t-plug.jpg" alt="T-plug" width=200>
@@ -22,7 +22,7 @@
## Gold bullet Conector или "Бананы"
Существует великое множество штырьковых разъёмов типа Gold bullet Conector. Разъёмы данного типа отличаются друг от друга диаметром и размером. Наиболее распространены разъёмы с диаметром коннектора 2 мм, 3 мм и 4 мм.
Существует великое множество штырьковых разъёмов типа Gold bullet Connector. Разъёмы данного типа отличаются друг от друга диаметром и размером. Наиболее распространены разъёмы с диаметром коннектора 2 мм, 3 мм и 4 мм.
Часто используется для создания беспаечных соединений на PDB и моторах.
<img src="../assets/Banana.jpg" alt="Banana" width=200>

View File

@@ -14,6 +14,8 @@
Для удобного редактирования текста, вы можете использовать текстовые редакторы с поддержкой Markdown: [Typora](https://typora.io), [Dillinger](https://dillinger.io/) (веб), [VSCode](https://code.visualstudio.com) с плагином [Markdown Editor](https://marketplace.visualstudio.com/items?itemName=MadsKristensen.MarkdownEditor).
Для VSCode также рекомендуется использование плагина [Code Spell Checker](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker) ([словарь для русского языка](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker-russian)).
Для локальной сборки статического сайта документации необходимо использовать утилиту [`gitbook-cli`](https://github.com/GitbookIO/gitbook-cli).
## Исправление ошибок в документации

View File

@@ -1,7 +1,7 @@
Copter Hack 2017
===
2830 июля 2017 "Коптер Экпресс" провел хакатон "Copter Hack 2017", на котором необходимо было запрограммировать "Клевер" на автономный танец-полет под случайную музыку.
2830 июля 2017 "Коптер Экспресс" провел хакатон "Copter Hack 2017", на котором необходимо было запрограммировать "Клевер" на автономный танец-полет под случайную музыку.
Победителем стала команда "Ящеры".
@@ -29,7 +29,7 @@ rosrun web_video_server web_video_server
Открыть в браузере страницу ``http://<ip raspberry>:8080``.
**Внимание**: раздача видеострима сильно снижает производительность распознования маркеров для полета.
**Внимание**: раздача видеострима сильно снижает производительность распознавания маркеров для полета.
SSID Wi-Fi
---

View File

@@ -1,7 +1,7 @@
Логи и топики PX4
===
Для детального анализа поведения прошивки PX4 можно просмотреть полетные логи. Полетные логи представляют собой сообщения в [uORB-топиках](https://dev.px4.io/en/middleware/uorb.html), записанные в файл с раширением `.ulg`. Лог-файл можно скачать с помощью QGroundControl по Wi-Fi или USB во вкладке *Log Download*:
Для детального анализа поведения прошивки PX4 можно просмотреть полетные логи. Полетные логи представляют собой сообщения в [uORB-топиках](https://dev.px4.io/en/middleware/uorb.html), записанные в файл с расширением `.ulg`. Лог-файл можно скачать с помощью QGroundControl по Wi-Fi или USB во вкладке *Log Download*:
![Логи в QGroundControl](../assets/download-log.png)
@@ -20,7 +20,8 @@
### FlightPlot
Также лог-файл можно анализировать с помомщью программы FlightPlot. Актуальную версию программы можно [скачать](https://github.com/PX4/FlightPlot/releases) на GitHub.
Также лог-файл можно анализировать с помомщ
ью программы FlightPlot. Актуальную версию программы можно [скачать](https://github.com/PX4/FlightPlot/releases) на GitHub.
В программе можно просмотреть полный список записанных топиков (*Fields List*). В нем нужно выбрать необходимые топики, после чего они появятся на графике:

View File

@@ -9,7 +9,7 @@
* `map` — координаты относительно точки инициализации полетного контроллера: белая сетка на иллюстрации;
* `base_link` — координаты относительно квадрокоптера: схематичное изображение квадрокоптера на иллюстрации;
* `body` — координаты относительно квадрокоптера без учета наклонов по тангажу и крену: красная, синия и зеленая линии на иллюстрации.
* `body` — координаты относительно квадрокоптера без учета наклонов по тангажу и крену: красная, синяя и зеленая линии на иллюстрации.
> **Hint** В соответствии с [соглашением](http://www.ros.org/reps/rep-0103.html), для фреймов, связанных с коптером, ось X направлена вперед, Y налево и Z вверх.

View File

@@ -135,7 +135,7 @@ irw
Это значит, что ваша конфигурация корректно распознается программой и теперь вы можете запрограммировать нужные вам действия в случае нажатия определенной клавиши.
## Работа с ИК-датчками в Python
## Работа с ИК-датчиками в Python
Чтобы иметь возможность использовать сигналы с ИК-приемника в Python программах, вам потребуется пакет `python-lirc`. [Установите его](#install) при необходимости.
@@ -169,7 +169,7 @@ end
+ `prog` имя программы, которое вы будете вызывать в своем скрипте
+ `button` наименование клавиши, которое вы вводили во время настройки пульта
+ `config` информация, которая будет передана вашей программе в случае нажатия указаной клавиши
+ `config` информация, которая будет передана вашей программе в случае нажатия указанной клавиши
Все настройки выполнены и теперь можно переходить непосредственно к программированию ИК-сигналов.

View File

@@ -4,7 +4,7 @@
Рекомендуемая для Клевера модель дальномера STM VL53L1X. Это дальномер может измерять расстояния от 0 до 4 м, при этом обеспечивая высокую точность измерений.
На [образе для Raspberry Pi](microsd_images.md) предустановен соответствующий ROS-драйвер.
На [образе для Raspberry Pi](microsd_images.md) предустановлен соответствующий ROS-драйвер.
### Подключение к Raspberry Pi
@@ -24,7 +24,7 @@
<arg name="rangefinder_vl53l1x" default="true"/>
```
По умолчания драйер дальномера передает данные в Pixhawk (через топик `/mavros/distance_sensor/rangefinder_sub`). Для просмотра данных из топика используйте команду:
По умолчания драйвер дальномера передает данные в Pixhawk (через топик `/mavros/distance_sensor/rangefinder_sub`). Для просмотра данных из топика используйте команду:
```bash
rostopic echo mavros/distance_sensor/rangefinder_sub
@@ -52,7 +52,7 @@ rospy.Subscriber('mavros/distance_sensor/rangefinder_sub', Range, range_callback
### Визуализация данных
Для посмотроения графика по данным с дальномера может быть использован rqt_multiplot.
Для построения графика по данным с дальномера может быть использован rqt_multiplot.
Для визуализации данных может быть использован rviz. Для этого необходимо добавить топик типа `sensor_msgs/Range` в визуализацию:

View File

@@ -1,7 +1,7 @@
Полетные режимы
===
Режим полетного контроллера определяет, как именно коптер (или другое ТС) должно себя вести: каким обрзом интерпретировать входящие команды и сигналы с пульта.
Режим полетного контроллера определяет, как именно коптер (или другое ТС) должно себя вести: каким образом интерпретировать входящие команды и сигналы с пульта.
PX4
---
@@ -31,7 +31,7 @@ PX4
В режиме автоматического полета квадрокоптер игнорирует сигналы с пульта.
* **AUTO.MISSION** PX4 выполняет заранее загруженную в квадрокоптер миссию (миссия загружается с помощью QGroundControl, или по [MAVLink](mavlink.md) используя [MAVROS](mavros.md).
* **AUTO.RTL** – коптер автоматически вовращается в точку взлета.
* **AUTO.RTL** – коптер автоматически возвращается в точку взлета.
* **AUTO.LAND** – коптер выполняет посадку.
### Управление с внешнего компьютера

View File

@@ -150,7 +150,7 @@ ___
Работа сети на [образе](microsd_images.md) поддерживается двумя предустановленными службами:
* **networking** — служба включает все сетевые интерфейсы в момент запуска [5].
* **dhcpcd** — служба обеспечивает настройку адресации и маршрутризации на интерфейсах, полученных динамически или указаных в файле настроек статически.
* **dhcpcd** — служба обеспечивает настройку адресации и маршрутизации на интерфейсах, полученных динамически или указанных в файле настроек статически.
Для работы в режиме роутера (точки доступа) RPi необходим DHCP сервер. Он служит для автоматической выдачи настроек текущей сети подключившимся клиентам. В роли такого сервера может выступать `isc-dhcp-server` или `dnsmasq`.

View File

@@ -20,7 +20,7 @@
* ориентация коптера (в локальной системе координат) pitch (тангаж), roll (крен), yaw (рысканье) (одно из представлений);
* позиция коптера (в локальной системе координат) x, y, z;
* скорость коптера (в локальной системе координат)  vx, vy, vz;
* глобальные координаты коптера  lattitude, longitude, altitude;
* глобальные координаты коптера  latitude, longitude, altitude;
* высота над поверхностью;
* другие параметры (дрейф гироскопов, скорость ветра и пр.).
@@ -30,7 +30,7 @@
`EKF2_AID_MASK` выбор датчиков, которые используются EKF2 для вычисления состояния коптера.
`EKF2_HGT_MODE` основной источник данных о высоте (z в локальной системе координт):
`EKF2_HGT_MODE` основной источник данных о высоте (z в локальной системе координат):
* 0 – давление с барометра.
* 1 GPS.
@@ -43,7 +43,7 @@
Данные параметры настраивают полет коптера по позиции (режимы POSCTL, OFFBOARD, AUTO).
`MPC_THR_HOVER` газ висения. Данный параметр наобходимо установить на примерный процент газа, необходимый для того, чтобы коптер удерживал высоту. Если коптер имеет тенденцию набирать или терять высоту в режиме удержания высоты – можно уменьшить или увеличить это значение.
`MPC_THR_HOVER` газ висения. Данный параметр необходимо установить на примерный процент газа, необходимый для того, чтобы коптер удерживал высоту. Если коптер имеет тенденцию набирать или терять высоту в режиме удержания высоты – можно уменьшить или увеличить это значение.
`MPC_XY_P` коэффициент *P* регулятора по позиции. Этот параметр влияет на то, насколько резко коптер будет выполнять заданные команды по позиции. Слишком большое значение может вызвать перестрелы.
@@ -67,6 +67,6 @@ TODO
## Sensors
Включение, выключение и настройка различных датчков.
Включение, выключение и настройка различных датчиков.
TODO

View File

@@ -3,7 +3,7 @@ ROS
Основная статья: http://wiki.ros.org
ROS – это широко используемый фреймворк для создания сложных и распределенных роботехнических систем.
ROS – это широко используемый фреймворк для создания сложных и распределенных робототехнических систем.
Установка
---
@@ -23,9 +23,9 @@ ROS уже установлен на [образе для RPi](microsd_images.md
Основная статья: http://wiki.ros.org/Nodes
ROS-нода это специальная программа (обычно написанная на Python или C++), которая взаимодействует с другими нодами посредством ROS-топиков и ROS-сервисов. Разделение сложных роботехнических систем на изолированные ноды дает определеные преимущества: понижается связанность кода, повышается переиспользуемость и надежность.
ROS-нода это специальная программа (обычно написанная на Python или C++), которая взаимодействует с другими нодами посредством ROS-топиков и ROS-сервисов. Разделение сложных робототехнических систем на изолированные ноды дает определенные преимущества: понижается связанность кода, повышается переиспользуемость и надежность.
Очень многие роботехнические библиотеки и драйвера выполнены именно в виде ROS-нод.
Очень многие робототехнические библиотеки и драйвера выполнены именно в виде ROS-нод.
Для того, чтобы превратить обычную программу в ROS-ноду, необходимо подключить к ней библиотеку `rospy` или `roscpp` и добавить инициализирующий код.
@@ -108,4 +108,4 @@ rosservice call /get_telemetry "{frame_id: ''}"
Основная статья: http://wiki.ros.org/ROS/Tutorials/MultipleMachines.
Преимуществом использования ROS явлется возможность распределения нод на несколько машин в сети. Например, ноду, осуществляющую распознование образом на изображении можно запустить на более мощном компьютере; ноду, управляющую коптером можно запустить непосредствено на Raspberry Pi, подключенном к полетому контроллеру и т. д.
Преимуществом использования ROS является возможность распределения нод на несколько машин в сети. Например, ноду, осуществляющую распознавание образом на изображении можно запустить на более мощном компьютере; ноду, управляющую коптером можно запустить непосредственно на Raspberry Pi, подключенном к полетому контроллеру и т. д.

View File

@@ -3,7 +3,7 @@
![rviz](../assets/rviz.png)
Инструмент [rviz](http://wiki.ros.org/rviz) позволяет в реальном времени визуализировать на 3D-сцене все компоненты роботехнической системы — системы координат, движущиеся части, показания датчиков, изображения с камер.
Инструмент [rviz](http://wiki.ros.org/rviz) позволяет в реальном времени визуализировать на 3D-сцене все компоненты робототехнической системы — системы координат, движущиеся части, показания датчиков, изображения с камер.
[rqt](http://wiki.ros.org/rqt) это набор GUI для анализа и контроля ROS-систем. Например, `rqt_image_view` позволяет просматривать топики с изображениями, `rqt_multiplot` – строить графики по значениям в топиках и т. д.

View File

@@ -18,7 +18,7 @@ rosrun clever selfcheck.py
* FCU проверка корректности соединения с полетным контроллером;
* IMU проверка корректности данных с IMU;
* Local position наличие локалной позиции дрона;
* Local position наличие локальной позиции дрона;
* Velocity estimation – оценка скоростей дрона (**запрещено выполнять автономный взлет при ошибках в этой проверке!**);
* Global position (GPS) – наличие глобальной позиции (требуется GPS);
* Camera корректная работа камеры Raspberry.

View File

@@ -7,14 +7,14 @@
## Установка QGroundControl
* Скачиваем установочный файл для Windows/iOS по ссылке [QGroundCongtrol](http://qgroundcontrol.com/downloads/).
* Соглашаемся с установкой драйверов при инсталяции
* Соглашаемся с установкой драйверов при инсталляции
## Форматирование карты памяти
* Устанавливаем карту памяти microSD в адаптер.
* Форматируем карту в файловую систему FAT32
правый клие на диске > Форматирование.
* Выполняем "Безопасное извлечение" карты напанели инструментов, далее извлекаем карту.
правый клик на диске > Форматирование.
* Выполняем "Безопасное извлечение" карты на панели инструментов, далее извлекаем карту.
* Устанавливаем microSD карту в полетный контроллер Pixhawk.
## Обновление прошивки Pixhawk

View File

@@ -33,7 +33,7 @@ set_rates = rospy.ServiceProxy('set_rates', srv.SetRates)
land = rospy.ServiceProxy('land', Trigger)
```
Неиспользуемые фукнции-прокси можно удалить из кода.
Неиспользуемые функции-прокси можно удалить из кода.
Описание API
---
@@ -112,7 +112,7 @@ rosservice call /get_telemetry "{frame_id: ''}"
* `auto_arm` перевести коптер в `OFFBOARD` и заармить автоматически (**коптер взлетит**);
* `frame_id`  [система координат](frames.md), в которой заданы `x`, `y`, `z` и `yaw` (по умолчанию: `map`).
> **Note** Для полета без изменения угла по рыскаью достаточно установить `yaw` в `NaN` (значение угловой скорости по-умолчанию 0).
> **Note** Для полета без изменения угла по рысканью достаточно установить `yaw` в `NaN` (значение угловой скорости по-умолчанию 0).
Взлет на высоту 1.5 м со скоростью взлета 0.5 м/с:
@@ -182,7 +182,7 @@ rosservice call /navigate "{x: 0.0, y: 0.0, z: 2, yaw: 0.0, yaw_rate: 0.0, speed
* `auto_arm` перевести коптер в `OFFBOARD` и заармить автоматически (**коптер взлетит**);
* `frame_id`  [система координат](frames.md), в которой заданы `z` и `yaw` (по умолчанию: `map`).
> **Note** Для полета без изменения угла по рыскаью достаточно установить `yaw` в `NaN` (значение угловой скорости по-умолчанию 0).
> **Note** Для полета без изменения угла по рысканью достаточно установить `yaw` в `NaN` (значение угловой скорости по-умолчанию 0).
Полет в глобальную точку со скоростью 5 м/с, оставаясь на текущей высоте (`yaw` установится в 0, коптер сориентируется передом на восток):
@@ -277,11 +277,11 @@ set_velocity(vx=0.4, vy=0.0, vz=0, yaw=float('nan'), yaw_rate=0.4, frame_id='bod
### set_rates
Установить угловые скорости по тагажу, крену и рысканью и уровень газа (примерный аналог управления в [режиме `ACRO`](modes.md)). Это самый низкий уровень управления коптером (исключая непосредственный контроль оборотов моторов). Данный сервис может быть использован для автоматического выполнения акробатических трюков (например, флипа).
Установить угловые скорости по тангажу, крену и рысканью и уровень газа (примерный аналог управления в [режиме `ACRO`](modes.md)). Это самый низкий уровень управления коптером (исключая непосредственный контроль оборотов моторов). Данный сервис может быть использован для автоматического выполнения акробатических трюков (например, флипа).
Параметры:
* `pitch_rate`, `roll_rate`, `yaw_rate` – угловая скорость по танажу, крену и рыканью *(рад/с)*;
* `pitch_rate`, `roll_rate`, `yaw_rate` – угловая скорость по тангажу, крену и рыканью *(рад/с)*;
* `thrust` уровень газа от 0 (нет газа, пропеллеры остановлены) до 1 (полный газ).
* `auto_arm` перевести коптер в `OFFBOARD` и заармить автоматически (**коптер взлетит**);
@@ -315,5 +315,5 @@ rosservice call /land "{}"
Дополнительные материалы
------------------------
* [Полеты в поле ArUco-макеров](aruco.md).
* [Полеты в поле ArUco-маркеров](aruco.md).
* [Примеры программ и сниппеты](snippets.md).

View File

@@ -72,4 +72,4 @@ QGroundControl автоматически подключится к запуще
```bash
roslaunch mavros px4.launch fcu_url:=udp://@127.0.0.1:14557
```
```

View File

@@ -11,7 +11,7 @@ Python
### # {#distance}
Функция определения расстяния между двумя точками (**важно**: точки должны быть в одной [системе координат](frames.md)):
Функция определения расстояния между двумя точками (**важно**: точки должны быть в одной [системе координат](frames.md)):
```python
def get_distance(x1, y1, z1, x2, y2, z2):
@@ -108,7 +108,7 @@ pose.pose.position.z = 3
pose.pose.orientation.w = 1
frame_id = 'base_link' # целевой фрейм
transform_timeout = rospy.Duration(0.2) # таймаут ожидания транформации
transform_timeout = rospy.Duration(0.2) # таймаут ожидания трансформации
# Преобразовываем позицию из старого фрейма в новый:
new_pose = tf_buffer.transform(pose, frame_id, transform_timeout)
@@ -127,7 +127,7 @@ flipped = not -PI_2 <= telem.pitch <= PI_2 or not -PI_2 <= telem.roll <= PI_2
### # {#angle-hor}
Рассчет общего угла коптера к горизонту:
Расчет общего угла коптера к горизонту:
```python
PI_2 = math.pi / 2

View File

@@ -25,7 +25,7 @@ UART последовательный асинхронный интерфе
Подробнее про UART на Raspberry Pi в [официальной статье](https://www.raspberrypi.org/documentation/configuration/uart.md).
Данные интерфейсы с помощью вентелей микроконтроллера можно переключать между двуями физическими выходами:
Данные интерфейсы с помощью вентелей микроконтроллера можно переключать между двумя физическими выходами:
1. разъём UART на GPIO;
2. Bluetooth модуль RPi.
@@ -37,7 +37,7 @@ UART последовательный асинхронный интерфе
Для удобства работы с этими выходами в Raspbian существуют алиасы:
* `/dev/serial0` всегда указывает на то TTY устройство, что подключено к GPIO портам.
* `/dev/serial1` всегда указывает на то TTY устройство, что подключено к Bluetooh модулю.
* `/dev/serial1` всегда указывает на то TTY устройство, что подключено к Bluetooth модулю.
### Настройка UART на Raspberry Pi

View File

@@ -1,6 +1,6 @@
# Просмотр изображений с камер
Для просмотра изображений с камер (или других ROS-топиков) можно воспользовться [rviz](rviz.md), rqt, или смотреть их через браузер, используя web\_video\_server.
Для просмотра изображений с камер (или других ROS-топиков) можно воспользоваться [rviz](rviz.md), rqt, или смотреть их через браузер, используя web\_video\_server.
См. подробнее про [использование rqt](rviz.md).