初心者向けのArduPilot。 BeagleBone Blueにインストールして構成する

Habrの志を同じくする人々のチーム( あなたも参加できます )と一緒 に、ゴルフ練習場でゴルフボールを収集するロボットを開発しています 。 これは高度に専門化されたサービスロボットであるため、単一のソフトウェアとハ​​ードウェアの複合体を同時に開発し、後で他のサービスロボットとUGVの基盤として使用できるようにする予定です。







前回の投稿で、このソフトウェアを停止した理由を説明しました。 プロジェクトを設定するときに、記事の情報を使用しました。 実際、ここではこの簡単なガイドの翻訳を紹介します。おそらく誰かにとって有用であり、最初または次のロボットを作るのに役立つでしょう。



始める前に、BeagleBone Blueを使用する価値があることを強調しておきます(青のままです)。 原則として、ナビゲーションに関連する多くの周辺機器を接続しますが、十分な電力がなければ正しく動作しません。



パート1. BeagleBoneの準備



https://rcn-ee.net/rootfs/bb.org/testing/に移動し、最新の日付のディレクトリを選択します。 次に、 stretch-consoleサブディレクトリを開きます。 ここにいくつかのファイルがあります。 'bone-debian-VV-console-armhf-20YY-MM-DD-1gb.img.xz'のようなファイルをダウンロードします。 これは必要なものだけを含む最小限のDebianディストリビューションです。 代替案はIoTイメージ(IoT =モノのインターネット)で、これには追加のソフトウェアが付属しており、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/ )。



これで、microSDカードからBeagleBone Blueをダウンロードできます。 これは、すべての対話方法を詳細に説明するこのドキュメントの範囲を超えていますが、多くの場合、これはマイクロUSBケーブルまたはSSH(「debian@192.168.7.2」、パスワード「temppwd」へ)またはCOMポート( Debianユーザー '、password' temppwd)をminicomやPuTTYなどのプログラムに入力します。 COMポートを介したLinuxコンソールへのこの接続。 BBBアセンブリのUART1は常にコンソールにバインドされ、最初にUブート、次にLinuxにバインドされます。 詳細については、 https//beagleboard.org/blueをご覧ください。



BeagleBoneドライバーはWindows 10に付属しています。Linuxでは、ユニバーサルUSB COMポートとしてのBBBが選択されない場合があります。 問題がある場合は試してください:



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
      
      





次の仕事は、手頃な価格のインターネット接続を使用してソフトウェアを更新およびインストールすることです。そのため、Wi-Fiアクセス用にconnmanをセットアップします。 これは、将来の作業を促進するためです。 まず、ルーターのSSIDとWiFiパスワードを書き留めます。 次に、次を入力します。



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





答えは「wifi_38d279e099a8_4254487562142d4355434b_managed_psk」のようになります。 何も表示されない場合は、もう一度試してください。入力ミスをした可能性があります。



次に、このネットワークIDを使用して、catを使用してキーボード(stdin)からファイルを1行ずつ直接入力します。



  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」と入力します



緑色の可視LEDが点灯します。つまり、Wi-Fiがオンになっています。 BBBlueはルーターに接続されており、Wi-Fiネットワーク上のIPアドレスは次を使用して検索できます。



 ip addr show wlan0
      
      





何らかの理由でBBBlueを直接要求できない場合は、nmap(sudo nmap 192.168.0.0/24)などの他のユーティリティを使用するか、ルーターにログインして他の方法でIPアドレスを検索します。



次に、Wi-Fi IPアドレスを使用してSSH経由で接続してみます。 192.168.7.2も機能することを忘れないでください。



WiFiをconnmanで動作させることができない場合、または単にconnmanを使用したくない場合は、次の方法を使用できます。 まず、sudo systemctl disable connmanと入力します。 次に、SSIDとWiFiパスワードを使用して、/ etc / network / interfaceを編集します



 # 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」と入力します。 緑色のLEDが点灯します。



BBに静的IP(たとえば192.168.0.99)を持たせる場合は、「#WiFi w / onboard device(dynamic IP)。」セクション/ etc / network / interfaces to read:



 # 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リアルタイムカーネル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
      
      





今すぐ再起動:



 sudo reboot
      
      





パート2. BeagleBoneにArduPilotをインストールする



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で、ArduPilotの「Telem1」シリアルポート(SERIAL1、デフォルト57600)をBBBlueのUART1にマップします。 たとえば、UART1に868x RFDesign無線が接続されています。 これは、私のドローンとの双方向データチャネルです。 さまざまな遠隔測定データを基地局に送信し、基地局からRTKコマンドと差分補正を受信します。



これは、起動パラメーターです-Aは、ArduPilotの「コンソール」シリアルポート(SERIAL0、デフォルト115200)をプロトコル、宛先IPアドレス、およびオプションのポート番号にマップします。 たとえば、これにより、テスト目的でWi-Fi経由で着信するMAVLinkデータを受信できます。 特にデータはすぐにMission PlannerとQGroundControlに送られるため、非常に便利です。



画像



これは起動パラメーターです-Bは、ArduPilotの「GPS」シリアルポート(SERIAL3、デフォルト57600)をUart2 BBBlue(UART、ボード自体に漠然とマークされた「GPS」)にマップします。 たとえば、UART2に接続されたU-blox NEO-M8Pがあります。



他の可能性があります-定義済みのポート速度とポート自体を備えた他の起動オプションがあります:



 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



次に、ArduCopter用の/du/systemd/system/arducopter.serviceというArduPilot systemdサービスファイルを作成します。



 [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の1つ、/ 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もどうですか? /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のIron構成ファイル/ 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を使用して、このファイルのアクセス許可を設定します。



ほとんど起こった! これで、Arm BBBlueアーキテクチャ専用に作成された最新のArduCopter、ArduPlaneなどの実行可能ファイルを取得し、/ 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は、彼のWebサイトでBBBMINIのプロセス(黒のBeagleBoneに基づく)を説明しています。 これまでの手順をすべて完了し、/ home / debianディレクトリにいると仮定した場合のBBBlue固有の手順は次のとおりです。



 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は、Ubuntuの比較的強力なx64デスクトップPCでそれらをクロスコンパイルする手順も提供します。これは、はるかに高速です。



必要なソフトウェアオプションに応じて

sudo systemctl enable arducopter.service

または

sudo systemctl enable arduplane.service

または

sudo systemctl enable ardurover.service

または

sudo systemctl enable antennatracker.service



再起動後、ArduPilotが自動的に起動します。 赤いLEDが点滅します!



systemctl( https://www.freedesktop.org/software/systemd/man/systemctl.html )をチェックアウトできます 。 便利なコマンド例:



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





パート3.周辺機器の接続



画像



基本的な最小構成には、次のものが含まれる可能性があります。





必要なコネクタ、ケーブル、およびツールに関するいくつかの言葉。 いくつかの推奨事項を説明しますが、初心者であれば、多くの時間、努力、お金を費やすことができます。 最も一般的に使用されるコネクタのタイプは、JST-SH 1.0 mmです。 4ポジションと6ポジションのサイズのいくつかのメスコネクタと圧着コンタクトを購入する必要があります。 次に、数メートルの異なる色のワイヤーを入手します。



したがって、周辺機器の接続に戻ります。







R / Cレシーバー:+ 5Vの接点とGNDでオフにすることができます。 残っているのは、レシーバーのSBUS出力、DSM出力、またはPPM出力を図にマークされている2つのSBUSピンのいずれかに接続することだけです。 次の受信機はテスト済みで動作しています。



FrSky( https://www.frsky-rc.com/ ):R-XSR、XR4SB、X6R、X8R、R9 SlimおよびR9 Mini(EU LBT 868 MHzおよびUniversal 915 MHzファームウェアの両方)。



Spektrum( https://www.spektrumrc.com/ ):PPM / SRXL / Remote Rxを備えたAR7700 DSMX。



TBS( http://team-blacksheep.com/ ):「フル」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」またはリアルタイムの運動学として知られる動作モードをサポートし、リアルタイムで数センチメートルの位置決め精度を達成できます。 ただし、この種のプレゼンテーションはNEO-M8Nの約10倍の価格で提供され、これには基地局がありません。 マニュアルの後半で、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 abcdef 00: -- -- -- -- -- -- -- -- -- 0c -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- 68 -- -- -- -- -- -- -- 70: -- -- -- -- -- -- 76 --
      
      





68 = InvenSense MPU-9250 IMU(搭載)、0c = AKM AK8963コンパス(搭載)、76 = Bosch BMP280バロメーター(搭載)。



 $ 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 = Honeywell HMC5843コンパス(外部)-多くの場合、u-blox NEO-M8NベースのGPSモジュールに統合されています。



Ground Control Station(GCS)ソフトウェアの使用開始



Windows用のミッションプランナー(http://firmware.ardupilot.org/Tools/MissionPlanner/MissionPlanner-latest.msi)またはLinuxおよびWindows用のQGroundControl(http://qgroundcontrol.com/)をダウンロードします。 これらのプログラムは両方とも、ネットワーク経由(たとえば、UDPポート14550経由)またはCOMポート経由で着信するMAVLinkデータストリームに接続します。



オプショナル



Bluetooth RF伝送が他のシステムに干渉しない限り、ドローンベースのbbblueにBluetoothスピーカーを装備するのは楽しいことです。 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> # <--- 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)最後に:



  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をお勧めします。



手伝いたい場合は、PMまたはVKFBで私に書いてください。



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



読んでくれてありがとう、そして私たちを完全に批判してくれてありがとう。



All Articles