Nous, avec une Ă©quipe (Ă
laquelle vous pouvez vous joindre ) de personnes partageant les mĂȘmes idĂ©es de Habr, dĂ©veloppons un
robot pour ramasser des balles de golf sur le practice . Il s'agit d'un robot de service hautement spĂ©cialisĂ©, nous prĂ©voyons donc de dĂ©velopper simultanĂ©ment un complexe logiciel et matĂ©riel unique, qui pourrait ĂȘtre utilisĂ© Ă l'avenir comme base pour d'autres robots de service et
UGV .
Dans le dernier article, nous avons expliquĂ© pourquoi nous nous sommes arrĂȘtĂ©s sur ce logiciel. Lors de la mise en place de notre projet, nous avons utilisĂ© les
informations de l'article . En fait, nous prĂ©sentons ici la traduction de ce bref guide, peut-ĂȘtre que pour quelqu'un, il sera utile et vous aidera Ă crĂ©er votre premier ou prochain robot.
Avant de commencer, je tiens à souligner qu'il vaut la peine d'utiliser BeagleBone Blue (il est toujours bleu). En rÚgle générale, nous attacherons quelques périphériques liés à la navigation, et ils ne fonctionneront pas correctement sans une puissance suffisante.
Partie 1. Préparer le BeagleBone
AccĂ©dez Ă
https://rcn-ee.net/rootfs/bb.org/testing/ et sélectionnez le répertoire avec la derniÚre date. Ouvrez ensuite le sous
- répertoire
stretch-console . Ici, vous verrez plusieurs fichiers. Téléchargez un fichier appelé Quelque chose comme
'bone-debian-VV-console-armhf-20YY-MM-DD-1gb.img.xz' . Il s'agit d'une distribution Debian minimale contenant uniquement l'essentiel. Une alternative est l'image IoT (IoT = Internet of Things), qui est fournie avec des logiciels supplĂ©mentaires et peut rendre votre travail plus confortable si vous ĂȘtes nouveau sous Linux. Il est disponible sur le mĂȘme site.
Nous utilisons:
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 .
Ensuite, vous devrez flasher l'image sur la carte microSD. Que vous utilisiez Linux ou Windows, je recommande fortement un programme appelé Etcher pour cette tùche (
https://etcher.io/ ).
Vous pouvez maintenant tĂ©lĂ©charger BeagleBone Blue Ă partir de la carte microSD. Cela dĂ©passe le cadre de ce document pour dĂ©crire en dĂ©tail toutes les mĂ©thodes d'interaction, mais souvent cela est rĂ©alisĂ© en se connectant via un cĂąble micro-USB ou via SSH (Ă 'debian@192.168.7.2', mot de passe 'temppwd') ou via le port COM ( Utilisateur Debian ', mot de passe' temppwd) dans un programme comme minicom ou PuTTY. Cette connexion Ă la console Linux via le port COM. UART1 sur les versions BBB est toujours liĂ© Ă la console, d'abord U-boot, puis Linux. Plus d'informations peuvent ĂȘtre trouvĂ©es ici:
https://beagleboard.org/blueLes pilotes BeagleBone sont livrĂ©s avec Windows 10. Sous Linux, BBB en tant que port COM USB universel peut ne pas ĂȘtre dĂ©tectĂ©. Si vous rencontrez des problĂšmes, essayez:
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
J'espĂšre que vous ĂȘtes maintenant connectĂ© Ă la ligne de commande. Nous commencerons par permettre Ă l'utilisateur Debian d'exĂ©cuter sudo sans avoir Ă saisir de mot de passe Ă chaque fois (par la suite):
echo "debian ALL=(ALL) NOPASSWD: ALL" | sudo tee -a /etc/sudoers.d/debian >/dev/null
La prochaine tĂąche consiste Ă mettre Ă jour et Ă installer le logiciel Ă l'aide d'une connexion Internet abordable, il est donc temps de configurer connman pour un accĂšs Wi-Fi. Je fais cela parce que cela facilitera le travail Ă l'avenir. Tout d'abord, notez le SSID et le mot de passe WiFi de votre routeur. Saisissez ensuite les informations suivantes:
sudo -s connmanctl services | grep '<your SSID>' | grep -Po 'wifi_[^ ]+'
La réponse ressemblera à ceci: «wifi_38d279e099a8_4254487562142d4355434b_managed_psk». Si vous ne voyez rien, essayez à nouveau - vous avez probablement fait une faute de frappe.
Maintenant, en utilisant cet ID réseau, nous allons entrer le fichier directement depuis le clavier (stdin) en utilisant cat, une ligne à la fois:
cat >/var/lib/connman/wifi.config [service_<your hash>] Type = wifi Security = wpa2 Name = <your SSID> Passphrase = <your WiFi password>
Important! Avant Ctrl + C, assurez-vous d'appuyer sur Entrée, sinon toute la ligne actuelle sera perdue.
Appuyez sur Ctrl-C pour quitter, puis tapez: quitter
La LED verte visible s'allume, ce qui signifie que le Wi-Fi est activĂ©. BBBlue est connectĂ© au routeur et son adresse IP sur votre rĂ©seau Wi-Fi peut ĂȘtre trouvĂ©e en utilisant:
ip addr show wlan0
Si, pour une raison quelconque, vous ne pouvez pas demander directement BBBlue, utilisez d'autres utilitaires tels que nmap (sudo nmap 192.168.0.0/24) ou en vous connectant Ă votre routeur et en y cherchant d'autres moyens pour trouver son adresse IP.
Essayez maintenant de vous connecter via SSH en utilisant son adresse IP Wi-Fi. N'oubliez pas que 192.168.7.2 fonctionnera également.
Si vous ne pouvez pas faire fonctionner le WiFi avec connman, ou si vous ne voulez tout simplement pas utiliser connman, vous pouvez utiliser la méthode suivante. Tout d'abord, tapez: sudo systemctl disable connman. Ensuite, avec votre SSID et votre mot de passe WiFi, éditez / etc / network / interfaces
Rechargez maintenant BBBlue avec:
sudo rebootAprĂšs vous ĂȘtre connectĂ©, tapez: sudo ifup wlan0. La LED verte doit s'allumer.
Si vous voulez que le BB ait une IP statique (disons 192.168.0.99), changez la section "# WiFi avec appareil embarqué (IP dynamique)". Section / etc / network / interfaces pour lire:
Mise à jour et installation de tous les programmes de support nécessaires:
sudo apt-get -y update sudo apt-get -y dist-upgrade sudo apt-get install -y cpufrequtils git
Mettre Ă jour les scripts: cd / opt / scripts & & git pull
Le noyau temps réel contient actuellement des bugs! Utilisez le correctif suivant: Spécifiez le noyau Ti en temps réel 4_4. N'utilisez pas 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
Enfin, copiez am335x-bone blue.dtb (depuis le répertoire bin de ce référentiel) vers /boot/dtbs/4.4.113-ti-rt-r149
Installer le script sur l'exécution automatique
sudo sed -i 's/#dtb=/dtb=am335x-boneblue.dtb/g' /boot/uEnv.txt
Réglez la fréquence
sudo sed -i 's/GOVERNOR="ondemand"/GOVERNOR="performance"/g' /etc/init.d/cpufrequtils
Configuration de bb-wl18xx-wlan0.service
sudo sed -i 's/RestartSec=5/RestartSec=1/g' /lib/systemd/system/bb-wl18xx-wlan0.service
Configuration de bb-wl18xx-wlan0.service
sudo sed -i 's/RestartSec=5/RestartSec=1/g' /lib/systemd/system/bb-wl18xx-wlan0.service
Désactiver Bluetooth (facultatif)
sudo systemctl disable bb-wl18xx-bluetooth.service
Développez la partition de carte microSD existante (/ dev / mmcblk0p1):
sudo /opt/scripts/tools/grow_partition.sh
Redémarrez maintenant:
sudo reboot
Partie 2. Installer ArduPilot sur un BeagleBone
Lorsque le BeagleBone redémarre, nous devons créer des fichiers texte. Tout d'abord, améliorer le fichier de configuration de l'environnement, / etc / default / ardupilot:
(Astuce: entrez sudoedit / etc / default / ardupilot et insérez votre propre adresse IP cible, par exemple 192.168.0.13) TELEM1="-C /dev/ttyO1" TELEM2="-A udp:<target IP address>:14550" GPS="-B /dev/ttyS2"
Il s'agit d'une configuration assez typique.
Il s'agit du paramÚtre de lancement -C mappe le port série «Telem1» d'ArduPilot (SERIAL1, 57600 par défaut) pour UART1 dans BBBlue. Par exemple, j'ai une radio RFDesign 868x connectée à UART1. Il s'agit d'un canal de données bidirectionnel avec mon drone. Il envoie diverses données de télémétrie à la station de base et reçoit des commandes RTK et des corrections différentielles de la station de base.
Il s'agit du paramĂštre de lancement -A mappe le port sĂ©rie «Console» d'ArduPilot (SERIAL0, 115200 par dĂ©faut) avec le protocole, l'adresse IP de destination et le numĂ©ro de port en option. Par exemple, cela me permet de recevoir des donnĂ©es MAVLink provenant du Wi-Fi Ă des fins de test. Vraiment utile, d'autant plus que les donnĂ©es peuvent immĂ©diatement ĂȘtre transmises Ă Mission Planner et QGroundControl.

Il s'agit du paramĂštre de lancement -B mappe le port sĂ©rie «GPS» d'ArduPilot (SERIAL3, 57600 par dĂ©faut) avec Uart2 BBBlue (UART, vaguement marquĂ© «GPS» sur la carte elle-mĂȘme). Par exemple, j'ai un U-blox NEO-M8P connectĂ© Ă UART2.
Il existe d'autres possibilitĂ©s - il existe d'autres options de lancement, avec des vitesses de port prĂ©dĂ©finies et les ports eux-mĂȘmes:
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
Consultez la documentation officielle d'ArduPilot pour plus d'informations sur les différents ports série:
http://ardupilot.org/plane/docs/parameters.html?highlight=parametersEnsuite, nous allons créer les fichiers de service ArduPilot systemd, un pour 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
Un pour 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
Un pour 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
Et AntennaTracker aussi? Créez /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
Allons dans le dossier sudo mkdir -p / usr / bin / ardupilot
Créez un fichier de configuration de fer pour ArduPilot, / usr / bin / ardupilot / aphw qui s'exécute avant les fichiers exécutables.
Les lignes 5-7 incluent la puissance servo BBBlue + 5V, c'est-à -dire lorsque vous utilisez des servos. Pas nécessaire pour ESC.
La ligne 8 comprend le PRU.
Utilisez sudo chmod 0755 / usr / bin / ardupilot / aphw pour définir les autorisations pour ce fichier.
C'est presque arrivé! Vous devriez maintenant obtenir les derniers fichiers exécutables ArduCopter, ArduPlane, etc. créés spécifiquement pour l'architecture Arm BBBlue et les placer dans le répertoire / usr / bin / ardupilot. Mirko Denecke les a téléchargés sur son site Web ici:
http://bbbmini.org/download/blue/Copiez dans ce référentiel:
https://github.com/imfatant/test/blob/master/bin/N'oubliez pas de définir les droits: sudo chmod 0755 / usr / bin / ardupilot / a *
Si vous trouvez que vous devez compiler Ă partir de la source, nâayez pas peur - ce nâest pas si difficile. De plus, cela signifie que vous pouvez crĂ©er votre propre logiciel ArduPilot.
Les collecter sur le BBBlue lui-mĂȘme prendra trop de temps. Patrick Poirier explique le processus de BBBMINI (basĂ© sur le BeagleBone noir) sur son site Web. Voici la procĂ©dure spĂ©cifique Ă BBBlue, en supposant que vous avez terminĂ© toutes les Ă©tapes jusqu'Ă prĂ©sent et que vous ĂȘtes dans le rĂ©pertoire / 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 fournit également des instructions pour les compiler de maniÚre croisée sur un PC de bureau x64 relativement puissant dans Ubuntu, ce qui est beaucoup, beaucoup plus rapide.
Selon l'option logicielle dont vous avez besoin
sudo systemctl enable arducopter.service
ou
sudo systemctl enable arduplane.service
ou
sudo systemctl enable ardurover.service
ou
sudo systemctl enable antennatracker.service
AprÚs le redémarrage, votre ArduPilot devrait démarrer automatiquement. Vous verrez une LED rouge clignotante!
Vous pouvez consulter systemctl (
https://www.freedesktop.org/software/systemd/man/systemctl.html ). Quelques exemples de commandes utiles:
sudo systemctl disable ... sudo systemctl start ... sudo systemctl stop ...
Partie 3. Connexion des périphériques

La configuration minimale de base comprendra probablement:
- Récepteur R / C.
- Récepteur GPS (avec ou sans boussole intégrée).
- Un modem radio pour un canal de données bidirectionnel, en particulier sur de longues distances.
- (Le WiFi BBBlue intégré est idéal pour le débogage et les tests à courte portée si 2,4 GHz est disponible, mais pour quelque chose de plus intéressant, un canal de données bidirectionnel dédié est recommandé. Gardez également à l'esprit le type et l'emplacement des antennes qui utilisent tous ces éléments. )
Quelques mots sur les connecteurs, les cĂąbles et les outils dont vous avez besoin. Je vais donner quelques recommandations, sinon, si vous ĂȘtes dĂ©butant, vous pouvez dĂ©penser beaucoup de temps, d'efforts et d'argent. Le type de connecteur le plus couramment utilisĂ© est JST-SH 1,0 mm. Vous devez acheter plusieurs connecteurs femelles en tailles 4 et 6 positions et contacts Ă sertir. Obtenez ensuite quelques mĂštres de fils de diffĂ©rentes couleurs.
Revenons donc à la connexion des périphériques:

RĂ©cepteur R / C: peut ĂȘtre dĂ©sactivĂ© Ă tout contact + 5V et GND. Il ne reste plus qu'Ă connecter la sortie SBUS, la sortie DSM ou la sortie PPM du rĂ©cepteur Ă l'une des deux broches SBUS marquĂ©es sur le schĂ©ma. Les rĂ©cepteurs suivants ont Ă©tĂ© testĂ©s et fonctionnent:
FrSky (
https://www.frsky-rc.com/ ): R-XSR, XR4SB, X6R, X8R, R9 Slim et R9 Mini (les deux firmwares EU LBT 868 MHz et Universal 915 MHz).
Spektrum (
https://www.spektrumrc.com/ ): AR7700 DSMX avec PPM / SRXL / Remote Rx.
TBS (
http://team-blacksheep.com/ ): Crossfire «complet» avec Nano Rx (Rx réglé sur le mode SBUS).
Soit dit en passant, ils parlent beaucoup du «SBUS inversé». En fait, SBUS n'est qu'un protocole de transfert de données en série que Futaba a inventé et que FrSky a copié. Il est à l'envers par rapport à l'UART «standard». Heureusement, l'Ardupilot Blue attend ce signal SBUS inversé, il n'y a donc pas besoin d'un inverseur de signal.
RĂ©cepteur GPS: la plupart des gens utilisent des rĂ©cepteurs u-blox, en particulier NEO-M8N et NEO-M8P. NEO-M8N est bon marchĂ© et abordable auprĂšs d'entreprises chinoises telles que HobbyKing, gĂ©nĂ©ralement sous forme de disque. IdĂ©alement, ils contiennent le rĂ©cepteur lui-mĂȘme, une trĂšs petite antenne patch en cĂ©ramique et comprennent souvent une boussole. Alors que BBBlue a dĂ©jĂ une boussole intĂ©grĂ©e (AKM AK8963), ArduPilot peut ĂȘtre configurĂ© pour utiliser cette boussole «externe» au lieu de la sienne, pour Ă©viter les interfĂ©rences.
Une alternative (beaucoup) plus chÚre au NEO-M8N est le NEO-M8P. Ce récepteur prend en charge un mode de fonctionnement appelé «RTK», ou cinématique en temps réel, qui peut atteindre une précision de positionnement de quelques centimÚtres en temps réel. Cependant, ce type de présentation a un prix environ 10 fois plus cher que le NEO-M8N, et ceci sans station de base. Plus loin dans le manuel, je consacrerai une section spéciale au M8P.
Fichier de configuration 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 (Ă bord), 0c = boussole AKM AK8963 (Ă bord), 76 = baromĂštre Bosch BMP280 (Ă bord).
$ 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 = boussole Honeywell HMC5843 (externe) - souvent intégrée dans les modules GPS basés sur u-blox NEO-M8N.
Prise en main du logiciel Ground Control Station (GCS)
Téléchargez n'importe quel planificateur de mission (http://firmware.ardupilot.org/Tools/MissionPlanner/MissionPlanner-latest.msi) pour Windows ou QGroundControl (http://qgroundcontrol.com/) pour Linux et Windows. Ces deux programmes se connecteront aux flux de données MAVLink arrivant sur le réseau (par exemple, via le port UDP 14550) ou via les ports COM.
En option
Ăquiper votre bbblue basĂ© sur drone avec un haut-parleur Bluetooth peut ĂȘtre amusant, Ă condition que les transmissions RF Bluetooth n'interfĂšrent pas avec d'autres systĂšmes. Il y a une tonne d'informations sur BlueZ / PulseAudio / ALSA, mais, heureusement, cela se rĂ©sume Ă quelque chose d'assez simple.
a) installez d'abord le logiciel nécessaire (à l'aide de la console ou de l'image IoT):
sudo apt-get install -y bluetooth pulseaudio pulseaudio-module-bluetooth alsa-utils
b) Activer Bluetooth (si désactivé): sudo systemctl enable bb-wl18xx-bluetooth.service
c) Modifiez /etc/pulse/default.pa:
d) Redémarrage: redémarrage sudo
e) AprÚs avoir chargé BBBlue, activez la colonne Bluetooth en mode connexion:
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) Enfin:
pulseaudio --start echo "connect <Bluetooth speaker's MAC address>" | bluetoothctl pactl list
C'est tout! Soit dit en passant, si vous prévoyez d'utiliser un synthétiseur vocal, je recommande Festival.
Si vous voulez aider - veuillez m'écrire dans le LAN ou
VK ,
FB .
habrastorage.org/webt/mt/lh/91/mtlh91x8jag1t-ibt_np3uayuke.jpegMerci d'avoir lu, demandez-nous et critiquez-nous complĂštement.