Files
clover/docs/ru/4g.md
2022-05-16 18:34:24 +03:00

184 lines
13 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Управление при помощи 4G связи
Мобильная связь четвертого поколения удобный инструмент для передачи и получения информации на большой скорости. В настоящее время область покрытия мобильных операторов позволяет подключаться к интернету на большой скорости практически из любой точки.
> **Hint** Для передачи каких либо данных с вашего коптера на наземную станцию(QGroundControl) и обратно, вам необходимо настроить собственную VPN сеть.
## Подключение 4G модема к Raspberry Pi
Подключите 4G модем с сим-картой в USB порт вашей Raspberry Pi.
Обратите внимание, что при подключении, некоторые модемы распознаются в системе как сетевая карта, без каких либо дополнительных настроек.
Пример 4g модема: *USB 4G Huawei E3372H*
<img src="../assets/4g/huawei.jpg" width=300 class="zoom center border">
Однако, некоторые модемы, например, *Quectel EP06*, автоматически не стартуют соединение. В этом случае необходимо воспользоваться утилитами `qmi-network` и `udhcpc`. Установить эти утилиты можно командой:
```bash
sudo apt install libqmi-utils udhcpc
```
Далее запустить соединение с интернетом следующими командами:
```bash
sudo ip link set wwan0 down
echo 'Y' | sudo tee /sys/class/net/wwan0/qmi/raw_ip
sudo ip link set wwan0 up
sudo qmi-network /dev/cdc-wdm0 start
sudo udhcpc -q -f -i wwan0
```
Более подробно прочитать про настройку сетевого подключения вы можете в [этой статье](https://docs.sixfab.com/page/setting-up-a-data-connection-over-qmi-interface-using-libqmi).
<!-- markdownlint-disable MD031 -->
> **Hint** Проверить наличие соединения с интернетом можно командой:
> ```bash
> ping -I wwan0 -c 5 8.8.8.8
> ```
<!-- -->
> **Hint** Проверить скорость соединения с интернетом можно утилитой `speedtest`:
> ```bash
> sudo apt install speedtest-cli
> speedtest
> ```
<!-- markdownlint-enable MD031 -->
## Подключение Raspberry Pi к VPN
Сформируйте необходимые ключи VPN сети, для подключения Raspberry Pi и наземной станции.
Для того, чтобы подключить Raspberry Pi к вашей сети, установите пакет `openvpn`:
```bash
sudo apt-get install openvpn
```
Перенесите ваши ключи в директорию `/etc/openvpn/client`. Для удобства используйте графический SFTP интерфейс передачи данных, к примеру: WinSCP, FileZilla и т.д.
Для включения режима клиента, необходимо активировать переданные вами ключи. Ключи могу быть сформированы в различных форматах, к примеру: `.ovpn`, `.conf`. Ключ или конфигурация использующийся на вашем коптере, должны быть строго в формате `.conf`.
Инициализируйте сервис применяющий ваши ключи для подключения в режиме клиента:
```bash
sudo systemctl enable openvpn-client@config-name
```
где `config-name` - название вашего конфигурационного файла.
Если все сделано правильно, при каждом перезапуске системы, сервис-клиент будет автоматически подключаться к вашей сети.
> **Hint** Перед началом работы не забудьте настроить и включить VPN подключение на вашем ПК.
<!-- -->
> **Hint** В качестве удобной альтернативы вы можете воспользоваться VPN-сервисом [ZeroTier](zerotier_vpn.md).
## Управление коптером через QGroundControl
> **Hint** Для управления коптером предлагается использовать UDP протокол передачи, обеспечивающий меньшую задержку, ценой отсутствия гарантии получения пакета, что очень важно во время пилотирования коптера.
Убедитесь, что ваш коптер и наземная станция подключены к вашей сети.
Для этого можете воспользоваться командой `ip addr`. Результатом ее выхода будет пронумерованный список активных сетей включенных на вашем устройстве. Обратить внимание стоит на подключение с префиксом *tun* и указанным вами IP адресом, если оно присутствует в вашем списке, ваш коптер подключился к сети.
В QGroundControl, аналогично [подключению по Wi-Fi](gcs_bridge.md), настройте подключение к вашему коптеру по протоколу использующемуся в вашей сети: *UDP/TCP*. Рекомендуется использовать *UDP* подключение, за счет большей скорости передачи данных.
Если у вас появилась связь с коптером, подключите какой-либо джойстик к вашему ПК. Роль джойстика может выполнять как радио пульты, такие как, FlySky-i6X, Taranis x7 и т.д., так и джойстики от приставок или любые их эмуляции, которые распознаются системой.
Когда джойстик распознается системой, в колонке *Vehicle Setup* появится пункт *Joystick*, в случае, если он подсвечивается красным цветом, это значит, что требуется настройка.
Для калибровки джойстика, во вкладке *Joystick* нажмите кнопку *Calibrate* и следуйте инструкциям положения стиков пульта, указанных с левой стороны окна.
<div class="image-group">
<img src="../assets/4g/calibrate.png" width=300 class="zoom border">
<img src="../assets/4g/calibration_instruction.png" width=300 class="zoom border">
</div>
После успешной калибровки необходимо настроить полетные режимы. Чтобы это сделать несколько раз переключите необходимые тумблеры. В ходе переключения, вы увидите виртуальные каналы, на которых работают тумблеры. В активном положении будет подсвечиваться один из каналов.
<img src="../assets/4g/fly_modes.png" width=300 class="zoom center border">
> **Info** При выборе джойстика, обратите внимание на количество рабочих каналов и на поддержку его, в QGroundControl(SDL2). Встречаются пульты поддерживающие всего 4 канала, что не удобно для такого типа управления.
Если изменения положения стиков отображается в окне QGroundControl, вам остается только применить параметр, определяющий, что управление коптером происходит с помощью джойстика, а не радиоаппаратуры:
`COM_RC_IN_MODE` - Joystick/No RC Checks
Поскольку мобильная связь не всегда бывает стабильна, рекомендуется увеличить таймаут на потерю сигнала управления до 5 секунд.
<img src="../assets/4g/failsafe.png" width=300 class="zoom center border">
Коптер готов к полету!
> **Hint** Если коптер не армится при переведении левого стика в нижний правый угол, установите состояние Arm/Disarm на один из тумблеров.
## Передача видео с камеры в QGroundControl
Передача видео возможна практически с любой камеры подключенной к вашей Raspberry Pi. Для этого вам потребуется установить или [собрать](https://github.com/sfalexrog/gst-rtsp-launch) пакет *gst-rtsp-launch*:
```bash
sudo apt update
sudo apt install gst-rtsp-launch
```
Чтобы запустить передачу изображений, необходимо ввести соответствующую командную строку:
<a id="command_line"></a>
```bash
gst-rtsp-launch "( v4l2src device=/dev/video0 ! video/x-raw,framerate=30/1,width=320,height=240 ! videoconvert ! v4l2h264enc output-io-mode=4 extra-controls=\"encode,frame_level_rate_control_enable=1,h264_profile=4,h264_level=13,video_bitrate=300000,h264_i_frame_period=5;\" ! rtph264pay name=pay0 pt=96 )"
```
Данная командная строка содержит параметры передачи видео, такие как: устройство передачи, частота кадров, высота/ширина изображения, метод кодирования и т.д. Подробнее о настройках [можно узнать тут](https://github.com/sfalexrog/gst-rtsp-launch/blob/master/README.md).
> **Info** Камера Raspberry Pi `/dev/video0` может использоваться сервисом `clover` и тогда `gst-rtsp-launch` не сможет получить к ней доступ. Чтобы остановить сервис `clover` выполните команду `sudo systemctl stop clover`. Также можно пустить трансляцию с USB-камеры, для этого замените устройство передачи на `/dev/video1`.
В приложении QGroundControl проверьте, что по ссылке `rtsp://192.168.11.1:8554/video` (IP-адрес вашей Raspberry Pi может отличаться) начался стрим изображения.
<img src="../assets/4g/video_stream.png" width=300 class="zoom center border">
## Автоматизация запуска передачи видео
Создайте файл и добавьте в него [командную строку](#command_line):
```bash
nano script_name.sh
```
Чтобы корректно запускать файл, необходимо присвоить ему соответствующие флаги доступа.
```bash
chmod a+x script_name.sh
```
Для того, чтобы передача видео запускалась каждый раз при включении системы, необходимо создать стартап-скрипт с помощью менеджера systemd. В директории `/etc/systemd/system` создайте файл `qgc_video.service`.
```bash
sudo nano /etc/systemd/system/qgc_video.service
```
В файл запишите соответствующие строки:
```
[Unit]
Description=VideoStream
[Service]
ExecStart=/bin/bash /home/pi/script_name.sh
[Install]
WantedBy=multi-user.target
```
Осталось только инициализировать ваш скрипт в системе и он будет запускаться при каждом ее включении.
```bash
sudo systemctl enable qgc_video.service
```