Мы с командой (к которой Вы можете присоединиться) единомышленников с Хабра разрабатываем робота для сбора мячей для гольфа на 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. Он доступен с того же сайта.
Мы используем: https://rcn-ee.net/rootfs/bb.org/testing/2018-10-07/stretch-console/bone-debian-9.5-console-armhf-2018-10-07-1gb.img.xz.
Далее вам нужно будет прошить образ на карту microSD. Используете ли вы Linux или Windows, я настоятельно рекомендую программу под названием Etcher для этой задачи (https://etcher.io/).
Теперь можно загрузить BeagleBone Blue с карты microSD. Это выходит за рамки этого документа, чтобы подробно описать все способы взаимодействия, но часто это достигается при подключении через микро-USB-кабель либо через SSH (к 'debian@192.168.7.2', пароль 'temppwd') или через COM-порт (пользователя по Debian', пароль 'temppwd) в программу, как minicom или PuTTY. Это подключение к консоли Linux через СОМ порт. UART1 на сборках BBB всегда забинден на консоль, сначала U-boot, а потом Линукса. Более подробную информацию можно найти здесь: https://beagleboard.org/blue
Драйверы BeagleBone поставляются с Windows 10. В Линкусе BBB как универсальный USB COM порт может не подхватиться. Если у вас возникли проблемы, попробуйте выполнить:
sudo -s
cat >/etc/udev/rules.d/73-beaglebone.rules <<EOF
ACTION=="add", SUBSYSTEM=="usb", ENV{DEVTYPE}=="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
Видный зеленый светодиод загорится, означая, что Wi-Fi включен. BBBlue подключен к маршрутизатору, и его IP-адрес в вашей сети Wi-Fi можно найти с помощью:
ip addr show wlan0
Если по какой-либо причине вы не можете запросить BBBlue напрямую, другими способами найти его IP-адрес используйте утилиты, такие как nmap (sudo nmap 192.168.0.0/24) или войдя в свой маршрутизатор и посмотрев там.
Теперь попробуйте подключиться по SSH, используя его Wi-Fi IP-адрес. Помните, что 192.168.7.2 также будет работать.
Если вы не можете заставить WiFi работать с connman, или вы просто не хотите использовать connman, вы можете использовать следующий метод. Во-первых, введите: sudo systemctl отключить 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. Зеленый светодиод должен загореться.
Если вы хотите, чтобы BB имел статический IP (скажем, 192.168.0.99), измените " # WiFi w/ onboard device (dynamic IP).'раздел /etc/network/interfaces для чтения:
# 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"
Это довольно типичная конфигурация.
Это параметр запуска -C maps ArduPilot's «Telem1» serial port (SERIAL1, по умолчанию 57600) для UART1 в BBBlue. Например, у меня RFDesign радиомодем 868x подключен к UART1. Это двунаправленный канал передачи данных с моим дроном. Он отправляет различные телеметрические данные на базовую станцию и получает команды и дифференциальные поправки RTK от базовой станции.
Это параметр запуска -A maps ArduPilot's «Console» serial port(SERIAL0, по умолчанию 115200) с протоколом, целевым IP-адресом и номером порта по выбору. Например, это позволяет мне получать данные MAVLink, поступающие через Wi-Fi для тестовых целей. Действительно полезный, особенно в виду того что, данные могут сразу поступать в Mission Planner и QGroundControl.
Это параметр запуска -B maps ArduPilot's «GPS» serial port(SERIAL3, по умолчанию 57600) с Uart2 BBBlue (UART, смутно отмеченный 'GPS' на самой плате). Например, у меня есть U-blox NEO-M8P, подключенный к UART2.
Существуют и другие возможности — есть и другие параметры запуска, с предустановленными скоростями портов и самими портами:
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.
Собирая их на самом BBBlue займет слишком много времени. Patrick Poirier объясняет процесс для BBBMINI (основанный на черном BeagleBone) на своем сайте. Вот специфичная для 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. Подключение периферийных устройств
Базовая минимальная конфигурация, вероятно, будет включать:
- R/C приемник.
- GPS-приемник (со встроенным компасом или без него).
- Радиомодем для двунаправленного канала передачи данных, особенно на больших расстояниях.
- (Встроенный WiFi BBBlue отлично подходит для отладки и тестирования на близком расстоянии, если доступен 2,4 ГГц, но для чего-то более интересного рекомендуется выделенный двунаправленный канал передачи данных. Также имейте в виду тип и размещение антенн, которые используют все эти элементы.)
Несколько слов о разъемах, кабелях и инструментах, которые вам понадобятся. Я собираюсь дать несколько рекомендаций, иначе, если вы новичок, вы можете потратить много времени, усилий и денег. Главным образом используемый тип разъема JST-SH 1.0 mm. Вы должны купить несколько разъемов «мама» в 4 и 6-позиционных размерах и обжимные контакты. Затем получите пару метров проводов разных цветов.
Итак, вернемся к подключению периферийных устройств:
Приемник R/C: может быть выключен в любой + 5V контакт и GND. Все, что остается, это подключить SBUS-выход приемника, DSM-выход или PPM-выход к одному из двух контактов SBUS, отмеченных на схеме. Следующие приемники были испытаны и работают:
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». На самом деле SBUS — это просто последовательный протокол передачи данных, который придумал Futaba, и который скопировал FrSky. Он перевернут по сравнению с «стандартом» UART. К счастью, Ardupilot Blue ожидает этот инвертированный сигнал SBUS, поэтому нет необходимости в инверторе сигнала.
Приемник GPS: большинство людей используют приемники u-blox, особенно NEO-M8N и NEO-M8P. NEO-M8N дешевый и доступный от китайских компаний, таких как HobbyKing, как правило, в форме диска. Удобно, эти они содержат приемник самого, очень небольшую керамическую антенну заплаты, и часто включают компас. В то время как BBBlue уже имеет встроенный компас (AKM AK8963), ArduPilot может быть настроен на использование этого «внешнего» компаса вместо своего, чтобы исключить наводки.
(Гораздо) более дорогой альтернативой NEO-M8N является NEO-M8P. Этот приемник поддерживает режим работы, известный как «RTK», или кинематический в реальном времени, который может достигать точности позиционирования в несколько сантиметров в режиме реального времени. Однако, этот вид представления приходит на цену приблизительно 10 раз дороже NEO-M8N, и это без базовой станции. Позже в руководстве я посвящу специальный раздел M8P.
Файл настройки 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.
habrastorage.org/webt/mt/lh/91/mtlh91x8jag1t-ibt_np3uayuke.jpeg
Спасибо, что дочитали, спрашивайте и критикуйте нас полностью.
Автор: webzuweb