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/blueLos 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
Ahora vuelva a cargar BBBlue con:
sudo rebootDespué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:
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.

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=parametersA 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.
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
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

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:
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>
f) Finalmente:
pulseaudio --start echo "connect <Bluetooth speaker's MAC address>" | bluetoothctl pactl list
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 .
habrastorage.org/webt/mt/lh/91/mtlh91x8jag1t-ibt_np3uayuke.jpegGracias por leer, preguntar y criticarnos por completo.