Nós, com uma equipe (da
qual você pode se juntar ) de pessoas com idéias semelhantes da Habr, estamos desenvolvendo um
robô para coletar bolas de golfe no driving range . Como é um robô de serviço altamente especializado, planejamos desenvolver simultaneamente um único complexo de software e hardware que possa ser usado posteriormente como base para outros robôs de serviço e
UGV .
No último post, descrevemos por que paramos neste software. Ao configurar nosso projeto, usamos as
informações do artigo . Na verdade, aqui apresentamos a tradução deste breve guia, talvez para alguém seja útil e o ajude a fazer seu primeiro ou próximo robô.
Antes de começar, quero enfatizar que vale a pena usar o BeagleBone Blue (ainda é azul). Como regra, anexaremos alguns dispositivos periféricos relacionados à navegação, e eles não funcionarão corretamente sem energia suficiente.
Parte 1. Preparando o BeagleBone
Vá para
https://rcn-ee.net/rootfs/bb.org/testing/ e selecione o diretório com a data mais recente. Em seguida, abra o subdiretório do
console extensível . Aqui você verá vários arquivos. Faça o download de um arquivo chamado Algo como
'bone-debian-VV-console-armhf-20AA-MM-DD-1gb.img.xz' . Esta é uma distribuição Debian mínima contendo apenas o essencial. Uma alternativa é a imagem da Internet das coisas (Internet das coisas), que vem com software adicional e pode tornar o trabalho mais confortável se você for novo no Linux. Está disponível no mesmo site.
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 .
Em seguida, você precisará piscar a imagem no cartão microSD. Se você usa Linux ou Windows, eu recomendo um programa chamado Etcher para esta tarefa (
https://etcher.io/ ).
Agora você pode baixar o BeagleBone Blue do cartão microSD. Isso está além do escopo deste documento para descrever em detalhes todos os métodos de interação, mas geralmente isso é alcançado através da conexão via cabo micro-USB ou via SSH (para 'debian@192.168.7.2', senha 'temppwd') ou pela porta COM ( Usuário Debian ', senha' temppwd) em um programa como minicom ou PuTTY. Essa conexão com o console Linux através da porta COM. O UART1 nas versões BBB é sempre vinculado ao console, primeiro ao U-boot e depois ao Linux. Mais informações podem ser encontradas aqui:
https://beagleboard.org/blueOs drivers BeagleBone vêm com o Windows 10. No Linux, o BBB como uma porta COM USB universal não pode ser atendido. Se você estiver tendo problemas, tente:
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 você esteja logado na linha de comando. Começaremos permitindo que o usuário debian execute o sudo sem ter que digitar uma senha toda vez (subseqüente):
echo "debian ALL=(ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/debian >/dev/null
O próximo trabalho é atualizar e instalar o software usando uma conexão de Internet acessível, por isso é hora de configurar o connman para acesso Wi-Fi. Faço isso porque facilitará o trabalho no futuro. Primeiro, anote a senha SSID e WiFi do seu roteador. Em seguida, digite o seguinte:
sudo -s connmanctl services | grep '<your SSID>' | grep -Po 'wifi_[^ ]+'
A resposta será mais ou menos assim: 'wifi_38d279e099a8_4254487562142d4355434b_managed_psk'. Se você não vir nada, tente novamente. Você provavelmente cometeu um erro de digitação.
Agora, usando esse ID de rede, vamos inserir o arquivo diretamente do teclado (stdin) usando cat, uma linha de cada 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, pressione Enter, caso contrário, toda a linha atual será perdida.
Pressione Ctrl-C para sair e digite: exit
O LED verde visível acenderá, o que significa que o Wi-Fi está ativado. O BBBlue está conectado ao roteador e seu endereço IP na sua rede Wi-Fi pode ser encontrado usando:
ip addr show wlan0
Se, por algum motivo, você não puder solicitar o BBBlue diretamente, use outros utilitários, como o nmap (sudo nmap 192.168.0.0/24) ou faça o login no seu roteador e procure nele de outras maneiras para encontrar seu endereço IP.
Agora tente conectar-se via SSH usando seu endereço IP Wi-Fi. Lembre-se de que 192.168.7.2 também funcionará.
Se você não conseguir que o WiFi funcione com o connman, ou se simplesmente não quiser usar o connman, use o seguinte método. Primeiro, digite: sudo systemctl disable connman. Em seguida, com sua senha SSID e WiFi, edite / etc / network / interfaces
Agora recarregue BBBlue com:
sudo rebootApós o login, digite: sudo ifup wlan0. O LED verde deve acender.
Se você deseja que o BB tenha um IP estático (por exemplo, 192.168.0.99), altere "# WiFi com dispositivo integrado (IP dinâmico)". Seção / etc / network / interfaces para ler:
Atualizando e instalando todos os programas de suporte necessários:
sudo apt-get -y update sudo apt-get -y dist-upgrade sudo apt-get install -y cpufrequtils git
Scripts de atualização: cd / opt / scripts & & git pull
O kernel em tempo real atualmente contém bugs! Use a seguinte correção: Especifique o kernel em tempo real Ti 4_4. Não 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
Por fim, copie am335x-bone blue.dtb (do diretório bin deste repositório) para /boot/dtbs/4.4.113-ti-rt-r149
Instale o script na execução automática
sudo sed -i 's/#dtb=/dtb=am335x-boneblue.dtb/g' /boot/uEnv.txt
Definir frequência
sudo sed -i 's/GOVERNOR="ondemand"/GOVERNOR="performance"/g' /etc/init.d/cpufrequtils
Configurando bb-wl18xx-wlan0.service
sudo sed -i 's/RestartSec=5/RestartSec=1/g' /lib/systemd/system/bb-wl18xx-wlan0.service
Configurando bb-wl18xx-wlan0.service
sudo sed -i 's/RestartSec=5/RestartSec=1/g' /lib/systemd/system/bb-wl18xx-wlan0.service
Desativar Bluetooth (opcional)
sudo systemctl disable bb-wl18xx-bluetooth.service
Expanda a partição do cartão microSD existente (/ dev / mmcblk0p1):
sudo /opt/scripts/tools/grow_partition.sh
Reinicie agora:
sudo reboot
Parte 2. Instale o ArduPilot em um BeagleBone
Quando o BeagleBone é reiniciado, precisamos criar alguns arquivos de texto. Primeiro, melhorando o arquivo de configuração do ambiente, / etc / default / ardupilot:
(Dica: digite sudoedit / etc / default / ardupilot e insira seu próprio endereço IP de destino, por exemplo, 192.168.0.13) TELEM1="-C /dev/ttyO1" TELEM2="-A udp:<target IP address>:14550" GPS="-B /dev/ttyS2"
Essa é uma configuração bastante típica.
Este é o parâmetro de inicialização -C mapeia a porta serial "Telem1" do ArduPilot (SERIAL1, padrão 57600) para UART1 no BBBlue. Por exemplo, eu tenho um rádio RFDesign 868x conectado ao UART1. Este é um canal de dados bidirecional com o meu drone. Ele envia vários dados de telemetria para a estação base e recebe comandos RTK e correções diferenciais da estação base.
Este é o parâmetro de inicialização -A mapeia a porta serial “Console” do ArduPilot (SERIAL0, padrão 115200) com protocolo, endereço IP de destino e número da porta opcional. Por exemplo, isso permite que eu receba dados do MAVLink vindos do Wi-Fi para fins de teste. Realmente útil, especialmente porque os dados podem ir imediatamente para o Mission Planner e o QGroundControl.

Este é o parâmetro de inicialização -B mapeia a porta serial “GPS” do ArduPilot (SERIAL3, padrão 57600) com Uart2 BBBlue (UART, vagamente marcado como 'GPS' na própria placa). Por exemplo, eu tenho um U-blox NEO-M8P conectado ao UART2.
Existem outras possibilidades - existem outras opções de inicialização, com velocidades de porta predefinidas e as próprias portas:
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 a documentação oficial do ArduPilot para obter mais informações sobre as várias portas seriais:
http://ardupilot.org/plane/docs/parameters.html?highlight=parametersEm seguida, criaremos os arquivos de serviço do systemd do ArduPilot, um para o 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
Um para o 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
Um para o 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
E o AntennaTracker também? Crie /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
Vamos para a pasta sudo mkdir -p / usr / bin / ardupilot
Crie um arquivo de configuração do ArduPilot, / usr / bin / ardupilot / aphw, que é executado antes dos arquivos executáveis.
As linhas 5-7 incluem a potência servo BBBlue + 5V, ou seja, quando você estiver usando servos. Não é necessário para o ESC.
A linha 8 inclui a PRU.
Use sudo chmod 0755 / usr / bin / ardupilot / aphw para definir permissões para este arquivo.
Quase aconteceu! Agora você deve obter os arquivos executáveis mais recentes do ArduCopter, ArduPlane etc. criados especificamente para a arquitetura Arm BBBlue e colocá-los no diretório / usr / bin / ardupilot. Mirko Denecke os carregou em seu site aqui:
http://bbbmini.org/download/blue/Copie para este repositório:
https://github.com/imfatant/test/blob/master/bin/Não se esqueça de definir os direitos: sudo chmod 0755 / usr / bin / ardupilot / a *
Se você acha que precisa compilar a partir da fonte, não se assuste - não é tão difícil. Além disso, isso significa que você pode criar seu próprio software ArduPilot.
Coletá-los no próprio BBBlue levará muito tempo. Patrick Poirier explica o processo do BBBMINI (baseado no BeagleBone preto) em seu site. Aqui está o procedimento específico do BBBlue, supondo que você tenha concluído todas as etapas até agora e esteja no diretório / 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 também fornece instruções para compilá-los em um PC desktop x64 relativamente poderoso no Ubuntu, que é muito, muito mais rápido.
Dependendo da opção de software necessária
sudo systemctl enable arducopter.service
ou
sudo systemctl enable arduplane.service
ou
sudo systemctl enable ardurover.service
ou
sudo systemctl enable antennatracker.service
Após a reinicialização, o seu ArduPilot deve iniciar automaticamente. Você verá um LED vermelho piscando!
Você pode conferir o systemctl (
https://www.freedesktop.org/software/systemd/man/systemctl.html ). Alguns exemplos de comandos úteis:
sudo systemctl disable ... sudo systemctl start ... sudo systemctl stop ...
Parte 3. Conectando periféricos

A configuração mínima básica provavelmente incluirá:
- Receptor R / C.
- Receptor GPS (com ou sem bússola integrada).
- Um modem de rádio para um canal de dados bidirecional, especialmente em longas distâncias.
- (O WiFi BBBlue embutido é ótimo para depuração e teste a curta distância, se 2,4 GHz estiver disponível, mas para algo mais interessante, é recomendado um canal de dados bidirecional dedicado. Lembre-se também do tipo e do posicionamento das antenas que usam todos esses elementos. )
Algumas palavras sobre os conectores, cabos e ferramentas que você precisa. Vou dar algumas recomendações, caso contrário, se você é iniciante, pode gastar muito tempo, esforço e dinheiro. O tipo de conector mais usado é o JST-SH 1,0 mm. Você precisa comprar vários conectores fêmea em tamanhos de posição 4 e 6 e contatos de crimpagem. Então pegue alguns metros de fios de cores diferentes.
Então, voltando à conexão de periféricos:

Receptor R / C: pode ser desligado em qualquer contato + 5V e GND. Tudo o que resta é conectar a saída SBUS, DSM ou PPM do receptor a um dos dois pinos SBUS marcados no diagrama. Os seguintes receptores foram testados e estão funcionando:
FrSky (
https://www.frsky-rc.com/ ): R-XSR, XR4SB, X6R, X8R, R9 Slim e R9 Mini (ambos os firmwares EU LBT 868 MHz e Universal 915 MHz).
Spektrum (
https://www.spektrumrc.com/ ): AR7700 DSMX com PPM / SRXL / Rx remoto.
TBS (
http://team-blacksheep.com/ ): Crossfire 'Full' com Nano Rx (Rx definido no modo SBUS).
Aliás, eles falam muito sobre o “SBUS invertido”. Na verdade, o SBUS é apenas um protocolo de transferência de dados serial que Futaba inventou e que FrSky copiou. Está de cabeça para baixo em comparação com o UART "padrão". Felizmente, o Ardupilot Blue espera esse sinal SBUS invertido, portanto não há necessidade de um inversor de sinal.
Receptor GPS: a maioria das pessoas usa receptores u-blox, especialmente NEO-M8N e NEO-M8P. O NEO-M8N é barato e acessível a partir de empresas chinesas como o HobbyKing, geralmente em forma de disco. Convenientemente, eles contêm o próprio receptor, uma antena muito pequena de cerâmica e geralmente incluem uma bússola. Enquanto o BBBlue já possui uma bússola embutida (AKM AK8963), o ArduPilot pode ser configurado para usar essa bússola “externa” em vez da sua, para evitar interferências.
Uma alternativa (muito) mais cara ao NEO-M8N é o NEO-M8P. Este receptor suporta um modo de operação conhecido como “RTK”, ou cinemático em tempo real, que pode alcançar precisão de posicionamento de alguns centímetros em tempo real. No entanto, esse tipo de apresentação tem um preço cerca de 10 vezes mais caro que o NEO-M8N, e isso é sem uma estação base. Posteriormente neste manual, dedicarei uma seção especial ao M8P.
Arquivo de configuração do 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 = bússola AKM AK8963 (a bordo), 76 = barômetro Bosch BMP280 (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 = bússola Honeywell HMC5843 (externa) - frequentemente integrada aos módulos de GPS baseados em u-blox NEO-M8N.
Introdução ao software Ground Control Station (GCS)
Faça o download de qualquer planejador de missão (http://firmware.ardupilot.org/Tools/MissionPlanner/MissionPlanner-latest.msi) para Windows ou QGroundControl (http://qgroundcontrol.com/) para Linux e Windows. Ambos os programas se conectam aos fluxos de dados do MAVLink que chegam pela rede (por exemplo, via porta UDP 14550) ou pelas portas COM.
Opcional
Equipar o seu bbblue baseado em drone com um alto-falante Bluetooth pode ser divertido, desde que as transmissões de RF por Bluetooth não interfiram com outros sistemas. Há uma tonelada de informações sobre o BlueZ / PulseAudio / ALSA, mas, felizmente, tudo se resume a algo bastante simples.
a) primeiro instale o software necessário (usando o console ou a imagem da IoT):
sudo apt-get install -y bluetooth pulseaudio pulseaudio-module-bluetooth alsa-utils
b) Ativar Bluetooth (se desativado): sudo systemctl enable bb-wl18xx-bluetooth.service
c) Edite /etc/pulse/default.pa:
d) Reinicialização: sudo reboot
e) Após carregar o BBBlue, ative a coluna Bluetooth no modo de conexão:
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
Isso é tudo! A propósito, se você for usar um sintetizador de voz, recomendo o Festival.
Se você quiser ajudar - por favor escreva-me na LAN ou
VK ,
FB .
habrastorage.org/webt/mt/lh/91/mtlh91x8jag1t-ibt_np3uayuke.jpegObrigado pela leitura, pergunte e nos critique completamente.