Хабрахабр

ArduPilot для новичков. Установка и настройка на BeagleBone Blue

Мы с командой (к которой Вы можете присоединиться) единомышленников с Хабра разрабатываем робота для сбора мячей для гольфа на driving range. Это узкоспециализированный сервисный робот, поэтому мы планируем одновременно разработать так же единый программно-аппаратный комплекс, который в дальнейшем можно было бы использовать как основу для других сервисных роботов и UGV.

При настройке нашего проекта мы использовали информацию из статьи. В прошлом посте мы описали, почему мы остановились на этом софте. Как правило, мы будем прикреплять довольно много периферийных устройств, связанных с навигацией, и они не будут работать правильно без достаточного питания. Собственно, здесь представляем перевод данного краткого руководства, возможно, для кого-то это окажется полезным и поможет Вам сделать своего первого или очередного робота.
Прежде чем я начну, я хочу подчеркнуть, что стоит использовать BeagleBone Blue (Она таки синего цвета).

Часть 1. Подготовка BeagleBone

Перейти к https://rcn-ee.net/rootfs/bb.org/testing/ и выберите каталог с последней датой. Затем откройте подкаталог stretch-console. Здесь вы увидите несколько файлов. Скачать файл с названием Что-то вроде 'bone-debian-V.V-console-armhf-20YY-MM-DD-1gb.img.xz'. Это минимальный дистрибутив Debian, содержащий только самое необходимое. Альтернативой является образ " IoT " (IoT = Internet of Things), который поставляется с дополнительным программным обеспечением и может сделать работу более комфортным, если вы новичок в Linux. Он доступен с того же сайта.

5-console-armhf-2018-10-07-1gb.img.xz. Мы используем: https://rcn-ee.net/rootfs/bb.org/testing/2018-10-07/stretch-console/bone-debian-9.

Используете ли вы Linux или Windows, я настоятельно рекомендую программу под названием Etcher для этой задачи (https://etcher.io/). Далее вам нужно будет прошить образ на карту microSD.

Это выходит за рамки этого документа, чтобы подробно описать все способы взаимодействия, но часто это достигается при подключении через микро-USB-кабель либо через SSH (к 'debian@192. Теперь можно загрузить BeagleBone Blue с карты microSD. 7. 168. Это подключение к консоли Linux через СОМ порт. 2', пароль 'temppwd') или через COM-порт (пользователя по Debian', пароль 'temppwd) в программу, как minicom или PuTTY. Более подробную информацию можно найти здесь: https://beagleboard.org/blue UART1 на сборках BBB всегда забинден на консоль, сначала U-boot, а потом Линукса.

В Линкусе BBB как универсальный USB COM порт может не подхватиться. Драйверы BeagleBone поставляются с Windows 10. Если у вас возникли проблемы, попробуйте выполнить:

sudo -s
cat >/etc/udev/rules.d/73-beaglebone.rules <<EOF
ACTION=="add", SUBSYSTEM=="usb", ENV=="usb_interface", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="a6d0", DRIVER=="", RUN+="/sbin/modprobe -b ftdi_sio"
ACTION=="add", SUBSYSTEM=="drivers", ENV{DEVPATH}=="/bus/usb-serial/drivers/ftdi_sio", ATTR{new_id}="0403 a6d0"
ACTION=="add", KERNEL=="ttyUSB*", ATTRS{interface}=="BeagleBone", ATTRS{bInterfaceNumber}=="00", SYMLINK+="beaglebone-jtag"
ACTION=="add", KERNEL=="ttyUSB*", ATTRS{interface}=="BeagleBone", ATTRS{bInterfaceNumber}=="01", SYMLINK+="beaglebone-serial"
EOF
udevadm control --reload-rules
exit

Надеюсь, теперь вы вошли в командной строке. Мы начнем с разрешения пользователю debian выполнять sudo без необходимости вводить пароль каждый (последующий) раз:

echo "debian ALL=(ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/debian >/dev/null

Следующая работа заключается в обновлении и установке программного обеспечения с помощью доступного подключения к интернету, так что пришло время, чтобы настроить connman для доступа Wi-Fi. Я делаю это, потому что это облегчит работу в дальнейшем. Во-первых, запишите SSID вашего маршрутизатора и пароль WiFi. Затем введите следующее:

sudo -s connmanctl services | grep '<your SSID>' | grep -Po 'wifi_[^ ]+'

Ответ будет выглядеть примерно так: 'wifi_38d279e099a8_4254487562142d4355434b_managed_psk'. Если вы ничего не видите, попробуйте еще раз-вы, вероятно, сделали опечатку.

Теперь, используя этот ID сети, мы собираемся ввести файл непосредственно с клавиатуры (stdin) с помощью cat, по одной строке за раз:

cat >/var/lib/connman/wifi.config [service_<your hash>] Type = wifi Security = wpa2 Name = <your SSID> Passphrase = <your WiFi password>

Важно! Перед Ctrl+C обязательно нажмите Enter, иначе вся текущая строка пропадет.
Нажмите сочетание клавиш Ctrl-C, чтобы выйти, а затем введите: exit

BBBlue подключен к маршрутизатору, и его IP-адрес в вашей сети Wi-Fi можно найти с помощью: Видный зеленый светодиод загорится, означая, что Wi-Fi включен.

ip addr show wlan0

Если по какой-либо причине вы не можете запросить BBBlue напрямую, другими способами найти его IP-адрес используйте утилиты, такие как nmap (sudo nmap 192.168.0.0/24) или войдя в свой маршрутизатор и посмотрев там.

Помните, что 192. Теперь попробуйте подключиться по SSH, используя его Wi-Fi IP-адрес. 7. 168. 2 также будет работать.

Во-первых, введите: sudo systemctl отключить connman. Если вы не можете заставить WiFi работать с connman, или вы просто не хотите использовать connman, вы можете использовать следующий метод. Затем, с вашим SSID и WiFi паролем, отредактируйте/etc/network/interfaces

# The loopback network interface.
auto lo
iface lo inet loopback # WiFi w/ onboard device (dynamic IP).
auto wlan0
iface wlan0 inet dhcp
wpa-ssid "<your SSID>"
wpa-psk "<your WiFi password>"
dns-nameservers 8.8.8.8 1.1.1.1 # Ethernet/RNDIS gadget (g_ether).
# Used by: /opt/scripts/boot/autoconfigure_usb0.sh
iface usb0 inet static
address 192.168.7.2
netmask 255.255.255.252
network 192.168.7.0
gateway 192.168.7.1

Теперь перезагрузите BBBlue с: sudo reboot

Зеленый светодиод должен загореться. После входа в систему введите: sudo ifup wlan0.

168. Если вы хотите, чтобы BB имел статический IP (скажем, 192. 99), измените " # WiFi w/ onboard device (dynamic IP).'раздел /etc/network/interfaces для чтения: 0.

# WiFi w/ onboard device (static IP).
auto wlan0
iface wlan0 inet static
wpa-ssid "<your SSID>"
wpa-psk "<your WiFi password>"
address 192.168.0.99 # <--- The desired static IP address of the BBBlue.
netmask 255.255.255.0
gateway 192.168.0.1 # <--- The address of your router.
dns-nameservers 8.8.8.8 1.1.1.1

Обновление и установка всех необходимых вспомогательных программ:

sudo apt-get -y update
sudo apt-get -y dist-upgrade
sudo apt-get install -y cpufrequtils git

Обновите скрипты: cd/opt /scripts & & git pull

Используйте следующее исправление: Укажите Ti real-time kernel 4_4. Ядро реального времени в настоящее время содержит ошибки! Не используйте 4_14.

sudo /opt/scripts/tools/update_kernel.sh --ti-rt-channel --lts-4_4 sudo sed -i 's|uboot_overlay_pru=/lib/firmware/AM335X-PRU-RPROC-4-14-TI-00A0.dtbo|#uboot_overlay_pru=/lib/firmware/AM335X-PRU-RPROC-4-14-TI-00A0.dtbo|g' /boot/uEnv.txt sudo sed -i 's|#uboot_overlay_pru=/lib/firmware/AM335X-PRU-RPROC-4-4-TI-00A0.dtbo|uboot_overlay_pru=/lib/firmware/AM335X-PRU-RPROC-4-4-TI-00A0.dtbo|g' /boot/uEnv.txt

Наконец, скопируйте am335x-bone blue.dtb (из каталога bin в этом репозитории) в /boot/dtbs/4.4.113-ti-rt-r149

Установите скрипт на автозапуске

sudo sed -i 's/#dtb=/dtb=am335x-boneblue.dtb/g' /boot/uEnv.txt

Установите частоту

sudo sed -i 's/GOVERNOR="ondemand"/GOVERNOR="performance"/g' /etc/init.d/cpufrequtils

Настройка bb-wl18xx-wlan0.service

sudo sed -i 's/RestartSec=5/RestartSec=1/g' /lib/systemd/system/bb-wl18xx-wlan0.service

Настройка bb-wl18xx-wlan0.service

sudo sed -i 's/RestartSec=5/RestartSec=1/g' /lib/systemd/system/bb-wl18xx-wlan0.service

Отключить Bluetooth (опционально)

sudo systemctl disable bb-wl18xx-bluetooth.service

Разверните существующий раздел карты microSD (/dev / mmcblk0p1):

sudo /opt/scripts/tools/grow_partition.sh

Reboot now:

sudo reboot

Часть 2. Установка ArduPilot на BeagleBone

Когда BeagleBone перезагрузится, нам нужно создать несколько текстовых файлов. Во-первых, совершенствовании файл конфигурации среды, /etc/default/ardupilot:
(Подсказка: введите sudoedit/etc / default/ ardupilot и вставьте свой собственный целевой IP-адрес, например 192.168.0.13)

TELEM1="-C /dev/ttyO1"
TELEM2="-A udp:<target IP address>:14550"
GPS="-B /dev/ttyS2"

Это довольно типичная конфигурация.

Например, у меня RFDesign радиомодем 868x подключен к UART1. Это параметр запуска -C maps ArduPilot's «Telem1» serial port (SERIAL1, по умолчанию 57600) для UART1 в BBBlue. Он отправляет различные телеметрические данные на базовую станцию и получает команды и дифференциальные поправки RTK от базовой станции. Это двунаправленный канал передачи данных с моим дроном.

Например, это позволяет мне получать данные MAVLink, поступающие через Wi-Fi для тестовых целей. Это параметр запуска -A maps ArduPilot's «Console» serial port(SERIAL0, по умолчанию 115200) с протоколом, целевым IP-адресом и номером порта по выбору. Действительно полезный, особенно в виду того что, данные могут сразу поступать в Mission Planner и QGroundControl.

image

Например, у меня есть U-blox NEO-M8P, подключенный к UART2. Это параметр запуска -B maps ArduPilot's «GPS» serial port(SERIAL3, по умолчанию 57600) с Uart2 BBBlue (UART, смутно отмеченный 'GPS' на самой плате).

Существуют и другие возможности — есть и другие параметры запуска, с предустановленными скоростями портов и самими портами:

Switch -A --> "Console", SERIAL0, default 115200
Switch -B --> "GPS", SERIAL3, default 57600
Switch -C --> "Telem1", SERIAL1, default 57600
Switch -D --> "Telem2", SERIAL2, default 38400
Switch -E --> Unnamed, SERIAL4, default 38400
Switch -F --> Unnamed, SERIAL5, default 57600

Обратитесь к официальной документации ArduPilot для получения более подробной информации о различных последовательных портах: http://ardupilot.org/plane/docs/parameters.html?highlight=parameters

Далее, мы создадим ArduPilot systemd service files, одну для ArduCopter, /lib/systemd/system/arducopter.service:

[Unit]
Description=ArduCopter Service
After=networking.service
StartLimitIntervalSec=0
Conflicts=arduplane.service ardurover.service antennatracker.service [Service]
EnvironmentFile=/etc/default/ardupilot
ExecStartPre=/usr/bin/ardupilot/aphw
ExecStart=/usr/bin/ardupilot/arducopter $TELEM1 $TELEM2 $GPS Restart=on-failure
RestartSec=1 [Install]
WantedBy=multi-user.target

Одна для ArduPlane, /lib/systemd/system/arduplane.service:

[Unit]
Description=ArduPlane Service
After=networking.service
StartLimitIntervalSec=0
Conflicts=arducopter.service ardurover.service antennatracker.service [Service]
EnvironmentFile=/etc/default/ardupilot
ExecStartPre=/usr/bin/ardupilot/aphw
ExecStart=/usr/bin/ardupilot/arduplane $TELEM1 $TELEM2 $GPS Restart=on-failure
RestartSec=1 [Install]
WantedBy=multi-user.target

Одну для ArduRover, /lib/systemd/system/ardurover.service:

[Unit]
Description=ArduRover Service
After=networking.service
StartLimitIntervalSec=0
Conflicts=arducopter.service arduplane.service antennatracker.service [Service]
EnvironmentFile=/etc/default/ardupilot
ExecStartPre=/usr/bin/ardupilot/aphw
ExecStart=/usr/bin/ardupilot/ardurover $TELEM1 $TELEM2 $GPS Restart=on-failure
RestartSec=1 [Install]
WantedBy=multi-user.target

Как насчет AntennaTracker, too? Создадим /lib/systemd/system/antennatracker.service:

[Unit]
Description=AntennaTracker Service
After=networking.service
StartLimitIntervalSec=0
Conflicts=arducopter.service arduplane.service ardurover.service [Service]
EnvironmentFile=/etc/default/ardupilot
ExecStartPre=/usr/bin/ardupilot/aphw
ExecStart=/usr/bin/ardupilot/antennatracker $TELEM1 $TELEM2 $GPS Restart=on-failure
RestartSec=1 [Install]
WantedBy=multi-user.target

Перейдем в папку sudo mkdir -p /usr/bin/ardupilot

Создадим файл конфигурации железа для ArduPilot, /usr/bin/ardupilot/aphw который запускается до исполняемых файлов.

#!/bin/bash
# aphw
# ArduPilot hardware configuration. /bin/echo 80 >/sys/class/gpio/export
/bin/echo out >/sys/class/gpio/gpio80/direction
/bin/echo 1 >/sys/class/gpio/gpio80/value
/bin/echo pruecapin_pu >/sys/devices/platform/ocp/ocp:P8_15_pinmux/state

Строки 5-7 включают питание сервопривода BBBlue +5V, т. е. когда вы используете сервоприводы. Не нужно для ESC.

Строка 8 включает PRU.

Используйте sudo chmod 0755 /usr/bin/ardupilot/aphw для установки разрешений для этого файла.

Теперь вы должны получить последние ArduCopter, ArduPlane и т. Почти получилось! исполняемые файлы, созданные специально для архитектуры Arm BBBlue, и поместите их в каталог /usr/bin/ardupilot. д. Mirko Denecke загрузил их на своем сайте здесь: http://bbbmini.org/download/blue/

Копия в этот репозиторий: https://github.com/imfatant/test/blob/master/bin/

Не забудьте установить права: sudo chmod 0755 / usr / bin / ardupilot / a*

Кроме того, это означает, что вы сможете создать свое собственное ПО ArduPilot. Если вы обнаружите, что нужно скомпилировать из исходников, не пугайтесь — это не так уж и сложно.

Patrick Poirier объясняет процесс для BBBMINI (основанный на черном BeagleBone) на своем сайте. Собирая их на самом BBBlue займет слишком много времени. Вот специфичная для BBBlue процедура, предполагающая, что вы выполнили все шаги до сих пор и находитесь в каталоге/home / debian:

sudo apt-get install g++ make pkg-config python python-dev python-lxml python-pip
sudo pip install future
git clone https://github.com/ArduPilot/ardupilot
cd ardupilot
git checkout Copter-3.6 # <-- For ArduCopter.
git submodule update --init --recursive
./waf configure --board=blue # <-- BeagleBone Blue.
./waf
sudo cp ./build/blue/bin/a* /usr/bin/ardupilot

Патрик также предоставляет инструкции по их кросс-компиляции на относительно мощном настольном x64 ПК в Ubuntu, что намного, намного быстрее.

В зависимости от того, какой вариант софта Вам нужен
sudo systemctl enable arducopter.service
или
sudo systemctl enable arduplane.service
или
sudo systemctl enable ardurover.service
или
sudo systemctl enable antennatracker.service

Вы увидите мигающий красный светодиод! После перезагрузки ваш ArduPilot должен запуститься автоматически.

Некоторые полезные примеры команд: Можете ознакомиться с systemctl (https://www.freedesktop.org/software/systemd/man/systemctl.html).

sudo systemctl disable ...
sudo systemctl start ...
sudo systemctl stop ...

Часть 3. Подключение периферийных устройств

image

Базовая минимальная конфигурация, вероятно, будет включать:

  • R/C приемник.
  • GPS-приемник (со встроенным компасом или без него).
  • Радиомодем для двунаправленного канала передачи данных, особенно на больших расстояниях.
  • (Встроенный WiFi BBBlue отлично подходит для отладки и тестирования на близком расстоянии, если доступен 2,4 ГГц, но для чего-то более интересного рекомендуется выделенный двунаправленный канал передачи данных. Также имейте в виду тип и размещение антенн, которые используют все эти элементы.)

Несколько слов о разъемах, кабелях и инструментах, которые вам понадобятся. Я собираюсь дать несколько рекомендаций, иначе, если вы новичок, вы можете потратить много времени, усилий и денег. Главным образом используемый тип разъема JST-SH 1.0 mm. Вы должны купить несколько разъемов «мама» в 4 и 6-позиционных размерах и обжимные контакты. Затем получите пару метров проводов разных цветов.

Итак, вернемся к подключению периферийных устройств:

Все, что остается, это подключить SBUS-выход приемника, DSM-выход или PPM-выход к одному из двух контактов SBUS, отмеченных на схеме. Приемник R/C: может быть выключен в любой + 5V контакт и GND. Следующие приемники были испытаны и работают:

FrSky (https://www.frsky-rc.com/): R-XSR, XR4SB, X6R, X8R, R9 Slim and R9 Mini (both EU LBT 868 MHz and Universal 915 MHz firmwares).

Spektrum (https://www.spektrumrc.com/): AR7700 DSMX with PPM/SRXL/Remote Rx.

TBS (http://team-blacksheep.com/): 'Full' Crossfire with Nano Rx (Rx set to SBUS mode).

На самом деле SBUS — это просто последовательный протокол передачи данных, который придумал Futaba, и который скопировал FrSky. Кстати, много говорят о «перевернутом SBUS». К счастью, Ardupilot Blue ожидает этот инвертированный сигнал SBUS, поэтому нет необходимости в инверторе сигнала. Он перевернут по сравнению с «стандартом» UART.

NEO-M8N дешевый и доступный от китайских компаний, таких как HobbyKing, как правило, в форме диска. Приемник GPS: большинство людей используют приемники u-blox, особенно NEO-M8N и NEO-M8P. В то время как BBBlue уже имеет встроенный компас (AKM AK8963), ArduPilot может быть настроен на использование этого «внешнего» компаса вместо своего, чтобы исключить наводки. Удобно, эти они содержат приемник самого, очень небольшую керамическую антенну заплаты, и часто включают компас.

Этот приемник поддерживает режим работы, известный как «RTK», или кинематический в реальном времени, который может достигать точности позиционирования в несколько сантиметров в режиме реального времени. (Гораздо) более дорогой альтернативой NEO-M8N является NEO-M8P. Позже в руководстве я посвящу специальный раздел M8P. Однако, этот вид представления приходит на цену приблизительно 10 раз дороже NEO-M8N, и это без базовой станции.

Файл настройки I2C ArduPilot: /var/APM/{ArduCopter.stg,ArduPlane.stg,APMrover2.stg,AntennaTracker.stg}

sudo apt-get install i2c-tools
sudo i2cdetect -r -y 0 sudo i2cdetect -r -y 1 sudo i2cdetect -r -y 2

$ sudo i2cdetect -r -y 2
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- 0c -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 70: -- -- -- -- -- -- 76 --

68 = InvenSense MPU-9250 IMU (onboard), 0c = AKM AK8963 compass (onboard), 76 = Bosch BMP280 barometer (onboard).

$ sudo i2cdetect -r -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 1e -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --

1e = Honeywell HMC5843 compass (external) — часто интегрирован в u-blox NEO-M8N-based GPS modules.

Начало работы с программным обеспечением наземной станции управления (GCS)

Скачать любой планировщик миссии (http://firmware.ardupilot.org/Tools/MissionPlanner/MissionPlanner-latest.msi) для Windows или QGroundControl (http://qgroundcontrol.com/) для Linux и Windows. Обе эти программы будут подключаться к потокам данных MAVLink, поступающим по сети (например, через UDP-порт 14550) или через COM-порты.

Дополнительно

Оснащение вашего bbblue на основе беспилотного с динамиком Bluetooth может быть весело, при условии, что передачи Bluetooth RF не мешают каких-либо других систем. На BlueZ/PulseAudio/ALSA есть куча информации, но, к счастью, все сводится к чему-то довольно простому.

a) сначала установите необходимое программное обеспечение (с помощью консоли или образа IoT):

sudo apt-get install -y bluetooth pulseaudio pulseaudio-module-bluetooth alsa-utils

b) Включить Bluetooth (если отключено): sudo systemctl enable bb-wl18xx-bluetooth.service

c) Отредактируйте /etc/pulse/default.pa:

### Automatically suspend sinks/sources that become idle for too long # load-module module-suspend-on-idle

d) Перезагрузите: sudo reboot

e) После загрузки BBBlue включите Bluetooth-колонку в режим соединения:

bluetoothctl scan on agent on default-agent pair <Bluetooth speaker's MAC address> # <--- e.g. AB:58:EC:5C:0C:03 connect <Bluetooth speaker's MAC address> # <--- Sometimes unnecessary. trust <Bluetooth speaker's MAC address> scan off exit

f) Наконец:

pulseaudio --start echo "connect <Bluetooth speaker's MAC address>" | bluetoothctl pactl list # <--- Use this to check that your Bluetooth speaker has been picked up by PulseAudio. pacmd set-card-profile 0 a2dp_sink aplay /usr/share/sounds/alsa/Front_Center.wav

Вот и все! Кстати, если вы собираетесь использовать синтезатор речи, я рекомендую Festival.

Если Вы желаете помочь — просьба написать мне в ЛС или ВК, FB.

imagehabrastorage.org/webt/mt/lh/91/mtlh91x8jag1t-ibt_np3uayuke.jpeg

Спасибо, что дочитали, спрашивайте и критикуйте нас полностью.

Теги
Показать больше

Похожие статьи

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»
Закрыть