ArduPilot para principiantes. Instalar y configurar en BeagleBone Blue

Con un equipo (al que puedes unirte ) de personas con ideas afines de Habr, estamos desarrollando un robot para recoger pelotas de golf en el campo de prácticas . Este es un robot de servicio altamente especializado, por lo tanto, planeamos desarrollar simultáneamente un único complejo de software y hardware, que luego podría usarse como base para otros robots de servicio y UGV .



En la última publicación, describimos por qué nos detuvimos en este software. Al configurar nuestro proyecto, utilizamos la información del artículo . En realidad, aquí presentamos la traducción de esta breve guía, tal vez para alguien le sea útil y lo ayude a hacer su primer o próximo robot.

Antes de comenzar, quiero enfatizar que vale la pena usar BeagleBone Blue (todavía es azul). Como regla general, conectaremos bastantes dispositivos periféricos relacionados con la navegación, y no funcionarán correctamente sin suficiente energía.

Parte 1. Preparando el BeagleBone


Vaya a https://rcn-ee.net/rootfs/bb.org/testing/ y seleccione el directorio con la última fecha. Luego abra el subdirectorio de la consola de estiramiento . Aquí verás varios archivos. Descargue un archivo llamado Something like 'bone-debian-VV-console-armhf-20YY-MM-DD-1gb.img.xz' . Esta es una distribución mínima de Debian que contiene solo lo esencial. Una alternativa es la imagen IoT (IoT = Internet of Things), que viene con un software adicional y puede hacer que el trabajo sea más cómodo si eres nuevo en Linux. Está disponible desde el mismo sitio.

Usamos: 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 .

A continuación, deberá actualizar la imagen en la tarjeta microSD. Ya sea que use Linux o Windows, le recomiendo un programa llamado Etcher para esta tarea ( https://etcher.io/ ).

Ahora puede descargar BeagleBone Blue desde la tarjeta microSD. Esto está más allá del alcance de este documento para describir en detalle todos los métodos de interacción, pero a menudo esto se logra mediante la conexión a través de un cable micro-USB o mediante SSH (a 'debian@192.168.7.2', contraseña 'temppwd') o a través del puerto COM ( Usuario de Debian ', contraseña' temppwd) en un programa como minicom o PuTTY. Esta conexión a la consola de Linux a través del puerto COM. UART1 en las compilaciones BBB siempre está vinculado a la consola, primero U-boot y luego Linux. Puede encontrar más información aquí: https://beagleboard.org/blue

Los controladores BeagleBone vienen con Windows 10. En Linux, BBB como puerto USB universal COM no puede ser recogido. Si tiene problemas, intente:

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 

Espero que ahora hayas iniciado sesión en la línea de comando. Comenzaremos permitiendo que el usuario de Debian ejecute sudo sin tener que ingresar una contraseña cada vez (posterior):

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

El siguiente trabajo es actualizar e instalar el software utilizando una conexión a Internet asequible, por lo que es hora de configurar connman para el acceso a Wi-Fi. Hago esto porque facilitará el trabajo en el futuro. Primero, escriba el SSID y la contraseña de WiFi de su enrutador. Luego ingrese lo siguiente:

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

La respuesta se verá así: 'wifi_38d279e099a8_4254487562142d4355434b_managed_psk'. Si no ve nada, inténtelo de nuevo, probablemente cometió un error tipográfico.

Ahora, usando esta ID de red, vamos a ingresar el archivo directamente desde el teclado (stdin) usando cat, una línea a la vez:

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

Importante! Antes de Ctrl + C, asegúrese de presionar Enter, de lo contrario se perderá toda la línea actual.
Presione Ctrl-C para salir y luego escriba: salir

El LED verde visible se encenderá, lo que significa que el Wi-Fi está encendido. BBBlue está conectado al enrutador y su dirección IP en su red Wi-Fi se puede encontrar usando:

 ip addr show wlan0 

Si por alguna razón no puede solicitar BBBlue directamente, use otras utilidades como nmap (sudo nmap 192.168.0.0/24) o inicie sesión en su enrutador y busque otras direcciones para encontrar su dirección IP.

Ahora intente conectarse a través de SSH utilizando su dirección IP de Wi-Fi. Recuerde que 192.168.7.2 también funcionará.

Si no puede hacer que WiFi funcione con connman, o simplemente no quiere usar connman, puede usar el siguiente método. Primero, escriba: sudo systemctl disable connman. Luego, con su SSID y contraseña de WiFi, edite / 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 

Ahora vuelva a cargar BBBlue con: sudo reboot

Después de iniciar sesión, escriba: sudo ifup wlan0. El LED verde debería encenderse.

Si desea que la BB tenga una IP estática (por ejemplo, 192.168.0.99), cambie la sección "# WiFi con dispositivo integrado (IP dinámica)". Sección / etc / network / interfaces para leer:

 # 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 

Actualización e instalación de todos los programas de soporte necesarios:

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

Actualizar scripts: cd / opt / scripts & & git pull

¡El kernel en tiempo real actualmente contiene errores! Use la siguiente solución: Especifique el kernel en tiempo real de Ti 4_4. No use 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 

Finalmente, copie am335x-bone blue.dtb (del directorio bin en este repositorio) a /boot/dtbs/4.4.113-ti-rt-r149

Instale el script en la ejecución automática

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

Establecer frecuencia

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

Configuración de bb-wl18xx-wlan0.service

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

Configuración de bb-wl18xx-wlan0.service

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

Deshabilitar Bluetooth (opcional)

 sudo systemctl disable bb-wl18xx-bluetooth.service 

Expanda la partición de la tarjeta microSD existente (/ dev / mmcblk0p1):

 sudo /opt/scripts/tools/grow_partition.sh 

Reiniciar ahora:

 sudo reboot 

Parte 2. Instale ArduPilot en un BeagleBone


Cuando se reinicia el BeagleBone, necesitamos crear algunos archivos de texto. Primero, mejorando el archivo de configuración del entorno, / etc / default / ardupilot:
(Sugerencia: ingrese sudoedit / etc / default / ardupilot e inserte su propia dirección IP de destino, por ejemplo 192.168.0.13)

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

Esta es una configuración bastante típica.

Este es el parámetro de lanzamiento -C asigna el puerto serie "Telem1" de ArduPilot (SERIAL1, predeterminado 57600) para UART1 en BBBlue. Por ejemplo, tengo una radio 868x RFDesign conectada a UART1. Este es un canal de datos bidireccional con mi dron. Envía varios datos de telemetría a la estación base y recibe comandos RTK y correcciones diferenciales de la estación base.

Este es el parámetro de lanzamiento -A asigna el puerto serie de "Consola" de ArduPilot (SERIAL0, predeterminado 115200) con protocolo, dirección IP de destino y número de puerto opcional. Por ejemplo, esto me permite recibir datos de MAVLink que llegan a través de Wi-Fi para fines de prueba. Realmente útil, especialmente porque los datos pueden ir inmediatamente a Mission Planner y QGroundControl.

imagen

Este es el parámetro de lanzamiento -B asigna el puerto serie “GPS” de ArduPilot (SERIAL3, predeterminado 57600) con Uart2 BBBlue (UART, vagamente marcado como 'GPS' en la placa). Por ejemplo, tengo un U-blox NEO-M8P conectado a UART2.

Hay otras posibilidades: hay otras opciones de inicio, con velocidades de puerto predefinidas y los puertos mismos:

 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 

Consulte la documentación oficial de ArduPilot para obtener más información sobre los diversos puertos seriales: http://ardupilot.org/plane/docs/parameters.html?highlight=parameters

A continuación, crearemos los archivos de servicio systemdu de ArduPilot, uno para 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 

Uno para 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 

Uno para 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 

¿Qué tal AntennaTracker, también? Cree /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 

Vayamos a la carpeta sudo mkdir -p / usr / bin / ardupilot

Cree un archivo de configuración de hierro para ArduPilot, / usr / bin / ardupilot / aphw que se ejecuta antes de los archivos ejecutables.

 #!/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 

Las líneas 5-7 incluyen BBBlue + 5V servo power, es decir, cuando usa servos. No es necesario para ESC.

La línea 8 incluye la PRU.

Use sudo chmod 0755 / usr / bin / ardupilot / aphw para establecer permisos para este archivo.

Casi sucedió! Ahora debería obtener los archivos ejecutables ArduCopter, ArduPlane, etc. más recientes creados específicamente para la arquitectura Arm BBBlue, y colocarlos en el directorio / usr / bin / ardupilot. Mirko Denecke los subió a su sitio web aquí: http://bbbmini.org/download/blue/

Copie a este repositorio: https://github.com/imfatant/test/blob/master/bin/

No olvide establecer los derechos: sudo chmod 0755 / usr / bin / ardupilot / a *

Si encuentra que necesita compilar desde la fuente, no se asuste, no es tan difícil. Además, esto significa que puede crear su propio software ArduPilot.

Recolectarlos en el BBBlue tomará demasiado tiempo. Patrick Poirier explica el proceso para BBBMINI (basado en el BeagleBone negro) en su sitio web. Aquí está el procedimiento específico de BBBlue, asumiendo que ha completado todos los pasos hasta ahora y está en el directorio / 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 

Patrick también proporciona instrucciones para compilarlos en una PC de escritorio x64 relativamente potente en Ubuntu, que es mucho, mucho más rápido.

Dependiendo de la opción de software que necesite
sudo systemctl enable arducopter.service
o
sudo systemctl enable arduplane.service
o
sudo systemctl enable ardurover.service
o
sudo systemctl enable antennatracker.service

Después de reiniciar, su ArduPilot debería iniciarse automáticamente. ¡Verás un LED rojo parpadeante!

Puede consultar systemctl ( https://www.freedesktop.org/software/systemd/man/systemctl.html ). Algunos comandos de ejemplo útiles:

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

Parte 3. Conexión de periféricos


imagen

Es probable que la configuración mínima básica incluya:

  • Receptor R / C.
  • Receptor GPS (con o sin brújula integrada).
  • Un módem de radio para un canal de datos bidireccional, especialmente a largas distancias.
  • (El WiFi BBBlue incorporado es ideal para depurar y probar a corta distancia si hay 2,4 GHz disponibles, pero para algo más interesante, se recomienda un canal de datos bidireccional dedicado. También tenga en cuenta el tipo y la ubicación de las antenas que utilizan todos estos elementos. )

Algunas palabras sobre los conectores, cables y herramientas que necesita. Voy a dar algunas recomendaciones, de lo contrario, si eres un principiante, puedes gastar mucho tiempo, esfuerzo y dinero. El tipo de conector más utilizado es JST-SH 1.0 mm. Debe comprar varios conectores hembra en tamaños de 4 y 6 posiciones y contactos de crimpado. Luego obtenga un par de metros de cables de diferentes colores.

Entonces, volviendo a conectar periféricos:



Receptor R / C: se puede apagar en cualquier contacto + 5V y GND. Todo lo que queda es conectar la salida SBUS del receptor, la salida DSM o la salida PPM a uno de los dos pines SBUS marcados en el diagrama. Los siguientes receptores han sido probados y funcionan:

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

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

TBS ( http://team-blacksheep.com/ ): 'Full' Crossfire con Nano Rx (Rx configurado en modo SBUS).

Por cierto, hablan mucho sobre el "SBUS invertido". En realidad, SBUS es solo un protocolo de transferencia de datos en serie que inventó Futaba y que FrSky copió. Está al revés en comparación con el UART "estándar". Afortunadamente, el Ardupilot Blue espera esta señal SBUS invertida, por lo que no hay necesidad de un inversor de señal.

Receptor GPS: la mayoría de las personas usan receptores u-blox, especialmente NEO-M8N y NEO-M8P. NEO-M8N es barato y asequible de compañías chinas como HobbyKing, generalmente en forma de disco. Convenientemente, contienen el receptor en sí, una antena de parche de cerámica muy pequeña, y a menudo incluyen una brújula. Si bien BBBlue ya tiene una brújula incorporada (AKM AK8963), ArduPilot se puede configurar para usar esta brújula "externa" en lugar de la suya propia, para evitar interferencias.

Una alternativa (mucho) más cara al NEO-M8N es NEO-M8P. Este receptor admite un modo operativo conocido como "RTK", o cinemático en tiempo real, que puede lograr una precisión de posicionamiento de unos pocos centímetros en tiempo real. Sin embargo, este tipo de presentación tiene un precio aproximadamente 10 veces más caro que el NEO-M8N, y esto no tiene una estación base. Más adelante en el manual dedicaré una sección especial al M8P.

Archivo de configuración de 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 abcdef 00: -- -- -- -- -- -- -- -- -- 0c -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 70: -- -- -- -- -- -- 76 -- 

68 = IMU InvenSense MPU-9250 (a bordo), 0c = brújula AKM AK8963 (a bordo), 76 = barómetro BMP280 de Bosch (a bordo).

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

1e = Brújula Honeywell HMC5843 (externa): a menudo integrada en módulos GPS basados ​​en NEO-M8N u-blox.

Introducción al software de la estación de control de tierra (GCS)


Descargue cualquier planificador de misiones (http://firmware.ardupilot.org/Tools/MissionPlanner/MissionPlanner-latest.msi) para Windows o QGroundControl (http://qgroundcontrol.com/) para Linux y Windows. Ambos programas se conectarán a las secuencias de datos MAVLink que ingresan a través de la red (por ejemplo, a través del puerto UDP 14550) o a través de los puertos COM.

Opcional


Equipar su bbblue basado en drones con un altavoz Bluetooth puede ser divertido, siempre que las transmisiones RF de Bluetooth no interfieran con ningún otro sistema. Hay un montón de información sobre BlueZ / PulseAudio / ALSA, pero, afortunadamente, se trata de algo bastante simple.

a) primero instale el software necesario (usando la consola o la imagen IoT):

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

b) Habilitar Bluetooth (si está deshabilitado): sudo systemctl enable bb-wl18xx-bluetooth.service

c) Editar /etc/pulse/default.pa:
  ### Automatically suspend sinks/sources that become idle for too long # load-module module-suspend-on-idle 

d) Reiniciar: reinicio de sudo

e) Después de cargar BBBlue, active la columna Bluetooth en modo de conexión:

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

f) Finalmente:

  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 

Eso es todo! Por cierto, si vas a usar un sintetizador de voz, te recomiendo Festival.

Si quieres ayudar, escríbeme en LAN o VK , FB .

imagen habrastorage.org/webt/mt/lh/91/mtlh91x8jag1t-ibt_np3uayuke.jpeg

Gracias por leer, preguntar y criticarnos por completo.

Source: https://habr.com/ru/post/es429510/


All Articles