NAVIO+ APM ROS Integlation
2017.09.01 IT Robotics NAVIO
EMLID から ROS:Robot Operating System をプレインストールした Emlid Raspbian Image が公開されました
2017/04/20
2017/04/20
Prev
Play
Next
はじめに ⇩
記事 ⇩
GitHub ⇩
Docker ⇩
DOC ⇩
設定 ⇩
基礎 ⇩
応用 ⇩
実用 ⇩
はじめに ⇩
ちょいメモ ⇩
用語 ⇩
はじめに
Emlid Raspbian images comes with pre-installed ROS. Emlid Raspbian imagesには、ROSがプリインストールされています。 Emlid Raspbian imagesには、WBCがプリインストールされています。
ちょいメモ
用語
記事
GitHub Emlid
linux-rt-rpi ⇩
Navio2 ⇩
Navio ⇩
mavlink-emlid ⇩
wifi_broadcast ⇩
bluetool ⇩
ArduPilot linux-configurator ⇩
Navio-SDK-experimental ⇩
linux-rt-rpi
Real-time kernel for Raspberry Pi ⇩
Cross-compiling the rt kernel on Linux ⇩
Setting up an SD card with the compiled rt kernel ⇩
Testing real-time capabilites using cyclictest utility ⇩
Real-time kernel for Raspberry Pi
このリポジトリは、rt-patchでパッチされたRaspberry Pi Linuxカーネルのフォークを保持し、完全にプリ エンプト可能なカーネルとして構成されています。 カーネルのコンパイル、設定、テストの手順は以下の通りです。
Cross-compiling the rt kernel on Linux
Download Raspberry Pi tools:
Download Raspberry Pi tools:
git clone https://github.com/raspberrypi/tools.gitDownload kernel sources and switch to rt branch:
git clone -b rpi-3.18.9-rt5 https://github.com/emlid/linux-rt-rpi.git cd linux-rt-rpiExport the following variables to specify cross-compilation options:
export ARCH=arm export CROSS_COMPILE=~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-If you compile on a x64-machine you need to change the last export to
export CROSS_COMPILE=~/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-For Raspberry Pi:
make bcmrpi_rt_defconfigFor Raspberry Pi 2:
make bcm2709_rt_defconfigOptional: make changes to the config
make menuconfigCompile the kernel:
make -j5Install modules, will result in "lib" folder with modules and firmware:
mkdir kernel-rt INSTALL_MOD_PATH=kernel-rt make modules_install
Setting up an SD card with the compiled rt kernel
Copy kernel:
For Raspberry Pi:
Copy kernel:
For Raspberry Pi:
Copy arch/arm/boot/Image to /boot/kernel.img on SD card. Copy arch/arm/boot/dts/bcm2708-rpi-b.dtb to /boot/bcm2708-rpi-b.dtb on SD card Copy arch/arm/boot/dts/bcm2708-rpi-b-plus.dtb to /boot/bcm2708-rpi-b-plus.dtb on SD card Copy (merge if necessary) kernel-rt/lib to / on SD card.For Raspberry Pi 2:
Copy arch/arm/boot/Image to /boot/kernel7.img on SD card. Copy arch/arm/boot/dts/bcm2709-rpi-2-b.dtb to /boot/bcm2709-rpi-2-b.dtb on SD card Copy (merge if necessary) kernel-rt/lib to / on SD card.
これで、SDカードをRaspberry Piに挿入して、起動を確認できます。 何か問題がある場合は、シリアルコンソールを観察することをお勧めします。
Testing real-time capabilites using cyclictest utility
Installing cyclictest utility on Raspberry Pi:
Installing cyclictest utility on Raspberry Pi:
git clone git://git.kernel.org/pub/scm/linux/kernel/git/clrkwllms/rt-tests.git cd rt-tests make all cp ./cyclictest /usr/bin/ cd ~Testing real-time:
sudo cyclictest -l1000000 -m -n -a0 -t1 -p99 -i400 -h400 -q
Navio
ラズベリーパイのNavio - autopilotシールドのドライバーとサンプル集
mavlink-emlid
MAVLink
MAVLink
Official Website: http://mavlink.org Source: Mavlink Generator Binaries (always up-to-date from master): C/C++ header-only library v1 C/C++ header-only library v2 Mailing list: Google GroupsMAVLink -- Micro Air Vehicle Message Marshalling Library.
これは、ドローンや地上制御ステーション間の軽量通信のためのライブラリです。 これは、XMLファイル内のメッセージを定義することを可能にし、異なる言語の適切なソースコードに変換され ます。 これらのXMLファイルは方言と呼ばれ、そのほとんどはcommon.xmlで提供される共通の方言に基づいています。 最初の実験的なMAVLinkは、無人機という用語がまだ消費者用の小型車の記述に使われていなかった2008年 に作られました。 MAVLinkプロトコルはバイトレベルのシリアル化を実行するため、あらゆるタイプの無線モデムで使用するのに 適しています。 このリポジトリは、主にXMLファイルを言語固有のライブラリに変換するPythonスクリプトです。 MAVLinkデータを操作するための例とユーティリティを提供する追加のPythonスクリプトがあります。 これらのスクリプトは、MAVLink方言のために生成されたPythonコードと同様に、Python 2.7以上を必要とし ます。Requirements
Python 2.7+ Tkinter (if GUI functionality is desired)Installation
ユーザーが書き込み可能なディレクトリにクローンします。
pymavlinkはサブモジュールであるため、gitの "--recursive"オプションを必ず使用してください。
あるいは、クローン作成後に "git submodule init"と "git submodule update"を実行して、pymavlinkを取得
してください。
PYTHONPATHにリポジトリディレクトリを追加する
次のセクションの指示に従いMAVLinkパーサーファイルを生成し、AND / ORスクリプト/サンプルセクションで
説明されているインクルードヘルパースクリプトを実行します。
Generating Language-specific Source Files言語固有のファイルは、コマンドラインから、またはGUIを使用して、Pythonスクリプトを介して生成すること ができます。 ダイアレクトXMLファイルが別のXMLファイルに依存している場合は、同じディレクトリに配置する必要があり ます。 ほとんどのMAVLink方言は共通のメッセージセットに依存しているので、あなたの方言を /message_definitions/v1.0/に置くことをお勧めします。UsageAvailable languages are:
C C# Java JavaScript Lua Python, version 2.7+From a GUI (recommended)
mavgenerate.pyは、Pythonで書かれたヘッダ生成ツールのGUIです。 TkinterはWindows上にPythonにのみ含ま れているため、Windows以外のプラットフォームには別途インストールする必要があります。 Pythonの-m引数を使ってどこからでも実行できます:From the command line$ python -m mavgenerate
mavgen.pyは、言語固有のMAVLinkライブラリを生成するためのコマンドラインインタフェースです。 これは実際にはmavgenerate.pyが使用するバックエンドです。 mavlinkディレクトリがPythonパスに追加され た後、コマンドラインから次のコマンドを実行して実行することができます:Usage$ python -m pymavlink.tools.mavgen
生成されたMAVLink方言ライブラリを使用することは言語によって異なり、以下の言語固有の詳細があります。C
MAVLinkを使用するには、プロジェクトにmavlink.hヘッダーファイルをインクルードします。Receiving#include個々のメッセージファイルは含めないでください。 場合によっては、インクルード検索パスにもメインフォルダを追加する必要があります。 安全のために、これらのフラグを推奨します:$ gcc -I mavlink/include -I mavlink/include/C MAVLinkライブラリーは、チャネル・メタファを使用して、同じプログラム内の複数のMAVLinkストリームの 同時処理を可能にします。 MAVLinkが提供するすべての受信機能と送信機能はチャンネルを必要とするため、操作ごとに正しいチャンネル を使用することが重要です。 1つのMAVLinkストリームのみが存在する場合は、MAVLINK_COMM_0定数を使用してチャネル0を使用する 必要があります。
MAVLink受信は、mavlink_helpers.h:mavlink_parse_char()を使用して行われます。Transmitting
送信はmavlink_msg _ * _ pack()関数を使って行うことができます。この関数はすべてのメッセージに対し て定義されています。 パックされたメッセージは、mavlink_helpers.h:mavlink_msg_to_send_buffer()でシリアル化された後、 結果のバイト配列を適切なシリアルインタフェースに書き出すことができます。 送信/受信コードの周りにラッパーを書くことによって上記を単純化することが可能である。 マルチバイト書き込みマクロ、MAVLINK_SEND_UART_BYTES()、 ]またはデータを送信するために低レベルドライバをラップする1バイト関数comm_send_ch()を定義すること ができます。 これが行われた場合は、MAVLINK_USE_CONVENIENCE_FUNCTIONSを定義する必要があります。Scripts/Examples
このMAVLinkライブラリには、pymavlink、pymavリンク/ツール、およびpymavlink / examplesディレクトリ内 のMAVLinkストリームの使用、操作、解析用のサポートライブラリとスクリプトも付属しています。 スクリプトには次の要件があります。Python 2.7+ mavlink repository folder in PYTHONPATH Write access to the entire mavlink folder. Your dialect's XML file is in message_definitions/*/これらのスクリプトを実行するには、Pythonを '-m'スイッチで実行します。 これは、指定されたスクリプトがPYTHONPATHに存在することを示します。 これは、PEP-328(および拒否されたPEP-3122)に従ってライブラリの一部であるPythonスクリプトを実行す るための適切な方法です。 次のコードは、記録されたMAVLinkストリームtest_run.mavlinkの/ pymavlink / tools /にあるmavlogdump.py を実行します(/ toolsおよび/ scriptsの他のスクリプトも同様の方法で実行できます)。$ python -m pymavlink.tools.mavlogdump test_run.mavlink
wifi_broadcast
EZ-Wifiブロードキャスト デジタルHDビデオ伝送が簡単にできます BefinitivのWifibroadcast(https://befinitiv.wordpress.com/wifi...ve-video-data/)の使い方を示しま す。 2枚のSDカードにSDカードイメージをダウンロードしてに入れ、15秒後にすべてを切り替えると、ライブのHD 画像が表示されます。 手順、機能、ダウンロードリンクについては、Wikiページをご覧ください。
bluetoolBluetool
Bluetooth D-Bus呼び出しのためのシンプルなPython API。 簡単なペアリング、接続、スキャンが可能です。 また、データ転送用のTCP-to-RFCOMMソケットブリッジを提供します。DependenciesInstallationUsageExamplesAbout the project
ArduPilot linux-configurator
APMに基づいてLinuxボードを設定するツールのセット
For install please:
APMに基づいてLinuxボードを設定するツールのセット
For install please:
make sudo make installSupported GCS:
QGroundControl
Navio-SDK-experimental
Requirements:
このコードは実験的です。 代わりにhttps://github.com/emlid/Navioを使用してください!Navio SDK
このSDKの主な目的は、ハードウェアのやり取りとアプリケーションロジックのためのイベントドリブン (https://en.wikipedia.org/wiki/Event-driven_programming)アプローチを導入することです。Compilling
Requirements:
c++11 compiller (clang and gcc is ok) cmake makeOn target device:
cmake . makeCross compiling with toolchain:
cmake . -DCMAKE_TOOLCHAIN_FILE=Toolchain description file may look like that(static toolchain linking):.cmake make
set( CMAKE_SYSTEM_NAME Linux ) set( CMAKE_C_COMPILER "${CMAKE_CURRENT_LIST_DIR}/armv6-rpi-linux-gnueabi/bin/armv6-rpi-linux-gnueabi-gcc" ) set( CMAKE_CXX_COMPILER "${CMAKE_CURRENT_LIST_DIR}/armv6-rpi-linux-gnueabi/bin/armv6-rpi-linux-gnueabi-g++" ) set( CMAKE_SYSROOT "${CMAKE_CURRENT_LIST_DIR}/armv6-rpi-linux-gnueabi/armv6-rpi-linux-gnueabi/sysroot" ) set( CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER ) set( CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY ) set( CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY ) set( CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY ) set( CMAKE_FIND_LIBRARY_SUFFIXES ".a" ) set( CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++ -s" CACHE STRING "thread cflags" )Documentation and Examples
ドキュメンテーションはソースコード自体から生成することができます。単にdoxygenを使って生成するだけです:また、ハードウェアのテストに使用できるいくつかの例があります。 例の中にその例があります。 サンプルを使用する前に、i2cとspiドライバがロードされていることを確認してください。Device Drivers
ADS1115 - 4 channel 16-bit ADC PCA9685 - 16-channel, 12-bit PWM MS5611 - Barometric pressure sensor BMP180 - Barometric pressure sensor L3GD20H - Three-axis gyroscope SSD1306 - OLED displayTODO
SPI bus driver MPU9250 U-blox M8N MB85RC FRAM HAT EEPROM LSM303DLHC
Docker
DOC Navio docs ⇩ 以下「Navio docs」による
Introduction ⇩
Hardware setup ⇩
Raspberry Pi configuration ⇩
ArduPilot ⇩
ROS ⇩
Navio for developers ⇩
Changelogs ⇩
Community projects ⇩
Introduction
コラボレーション このドキュメントはGitHubで編集可能です。 間違いが見つかった場合は、十分に文書化されていないタイプミスや部分だけで問題を開いたり、 プルリクエストを送信して貢献したりします。
Hardware setup
Currently supported boards 現在サポートされているボードNavio +のAPMオートパイロットポートは、Raspberry Pi 2 Model Bで開発され、テストされています。 Raspberry Pi Model A+ and Raspberry Pi Model B は APM:Copterを実行するパフォーマンスがありません。 これらのモデルは、開発者の例とAPM:Roverを実行するのに十分です。 これらのモデルは、開発者の例とAPM:Roverを実行するのに十分です。 上記のすべてのボードでNavio +を使用することは完全に安全です。Attaching Navio+ to a Raspberry Pi Navi +をラズベリーにつなげるラズベリーパイの上面にスペーサーを取り付け、下からネジで固定します。 拡張ヘッダーを40ピンgpioポートに接続します。 拡張ヘッダにNavio +をハンダ付けします。 ネジを使ってNavio +を固定します。Powering Navio+ Powering servo rail GNSS antenna RC input RC output Telemetry modem Barometer UV protection 気圧計UVプロテクションMS5611気圧計(スチールキャップIC)はUV光に敏感で、太陽光の下で高度の急激な上昇する可能性があります。 布(マイクロフォン布のようなもの)で覆うか、日光と空気の両方から保護するために自動操縦を保護ケースに 入れておくことが必要です。3D cases Anti-vibration mount Available GPIO pins 利用可能なGPIOピン以下のGPIOピンは、Navio +に接続されていない29 - GPIO5 31 - GPIO6 33 - GPIO13 35 - GPIO19 36 - GPIO16 32 - GPIO12はAUXコネクタ、5Vロジック・レベル・トレラントADC pins ADCピンNavio +の下にはパッドADC2とADC3があり、APMのピン4または5として使用できます。 ADCの範囲は0〜3.3Vです。
Raspberry Pi configuration
Downloading configured Raspbian image ⇩
Writing image to SD card ⇩
Configuring Wi-Fi access ⇩
Upgrading ⇩
Downloading configured Raspbian image
Navioは事前に設定されたRaspbianを実行する必要があります。 ラズベリーパイ2と3のための統一されたSDカードイメージを提供します。 OSはヘッドレスです。つまり、ドローンアプリケーションでは不要なので、GUIなしで提供されます。Download emlid-raspbian-20170323 SD card image, (md5)
Writing image to SD card
最新のEmlid Raspbian Imageを入手してください。 管理者権限でEtcherをダウンロード、展開、実行します。 イメージとsdカードのドライブ文字を含むアーカイブファイルを選択します。 「Flash!」をクリックします。 プロセスには数分かかることがあります。 より詳細な手順はこちらから入手できます。
Configuring Wi-Fi access ⇩
Edit configuration on SD card ⇩
Use monitor and keyboard ⇩
Use Ethernet ⇩
Trying to connect using Zeroconf ⇩
Finding an IP address ⇩
wpa_passphrase on Linux ⇩
Raspberry Pi3には内部Wi-Fiモジュールが、Raspberry Pi2には外部USB Wi-Fiドングルが必要です。 Wi-Fiネットワークは、SDカード(/ bootパーティション)にあるwpa_supplicant.confファイルを編集すること で設定できます。 ネットワークを追加するには、次の行を追加します。network={ ssid="yourssid" psk="yourpasskey" key_mgmt=WPA-PSK }このファイルにアクセスするには、次のいずれかの方法を使用します。
Edit configuration on SD card
コンピュータにSDカードを接続します。 SDカードの内容にアクセスしたら、/ bootパーティションにあるwpa_supplicant.confを開き(Linuxのroot 権限で)、上記のようにファイルを編集します。
Use monitor and keyboard
HDMIモニターとUSBキーボードをラズベリーに接続して電源を入れる。 コンソールにアクセスして、wpa_supplicantをテキストエディタで変更できます。 システムにログインしたら、次のように入力します。sudo nano /boot/wpa_supplicant.conf上記のようにファイルを修正し、保存して再起動します。 一部のキーボードがこのカーネルと互換性がないため、この方法は問題があります。 キーボードが機能しない場合は、別の方法を試してみるか、別の方法を使用してください。
Use Ethernet
イーサネットケーブルを使用してスイッチ、ルータ、またはコンピュータに直接接続することで、Ethernet 経由でRaspberry Piに接続できます。
Trying to connect using Zeroconf
Zeroconfを使用しラズベリーパイにsshすることができる。 MacまたはLinuxではssh pi@navio.localを、Windowsではパテにnavio.localと入力してみてください。 それがうまく行かない場合は、以下のセクションをお読みください。
Finding an IP address
Raspberry PiのIPアドレスを見つけるにはnmapユーティリティを使います。 これはデスクトップ上のコンソールから実行できます:nmap -sn 192.168.1。* あなたは電話でZenmapやFingアプリケーションなどのGUIでそれを使用することができます。 ホスト名 "navio"を探します。
wpa_passphrase on Linux
RaspberryまたはLinuxコンピュータ上でファイルを編集する場合は、wpa_supplicant.confにwpa_passphrase というユーティリティを次のように設定できます。sudo bash -c "wpa_passphrase SSIDパスワード>> /boot/wpa_supplicant.conf
Upgrading
次のコマンドを実行してシステムをアップグレードできます。sudo apt-get update && sudo apt-get dist-upgrade
ArduPilot
ArduPilot installation and running ⇩
Ardupilot upgrade ⇩
Building ArduPilot from sources ⇩
ArduPilot installation and running
Overview ⇩
Current vehicle versions ⇩
Greeting ⇩
Systemd ⇩
Choosing a vehicle, version and board ⇩
Specifying launching options ⇩
Reload configuration ⇩
Starting ⇩
Autostarting on boot ⇩
Connecting to the GCS ⇩
MAVProxy ⇩
Launching a custom ArduPilot binary ⇩
Overview
ArduPilotをNavioでRaspberry Pi 3または2で実行できます。 オートパイロットのコードはRaspberry Piで直接動作します。 ArduPilotが正しく動作するためには、私たちが提供する構成済みのRaspbianディストリビューションを使用し てください。
Current vehicle versions
Emlid Raspbianには、現在、以下のArduPilotがプリインストールされています。ArduPlane: 3.7.1 ArduRover: 3.1.2 ArduCopter: 3.4.6
Greeting
SHHでラズベリーパイに入ると、次のようなメッセージが表示されます。To enable ArduPilot on boot: STEP 1: Choose your vehicle, board and ArduPilot version using update-alternatives (Please, read carefully all options and select appropriate one for either Navio 2 or Navio+) - sudo update-alternatives --config arducopter - sudo update-alternatives --config arduplane - sudo update-alternatives --config ardurover STEP 2: Set your GCS IP - sudo nano /etc/default/arducopter - sudo nano /etc/default/arduplane - sudo nano /etc/default/ardurover STEP 3: Reload configuration by issuing these commands - sudo systemctl daemon-reload To start ardupilot (this won't load ArduPilot on boot): - sudo systemctl start arducopter - sudo systemctl start arduplane - sudo systemctl start ardurover STEP 4: Enable service on boot: - sudo systemctl enable arducopter - sudo systemctl enable arduplane - sudo systemctl enable ardurover To disable ArduPilot on boot: - sudo systemctl disable arducopter - sudo systemctl disable arduplane - sudo systemctl disable ardurover
Systemd
ArduPilotを起動するには、すべてのサービスとプロセスを管理するsystemd initシステムを使用しています。 systemdを制御するために使用される主なコマンドはsystemctlです。 その用途のいくつかは次のとおりです。システムの状態を調べる システムとサービスの管理。詳細は、man systemctlを参照してください。
Choosing a vehicle, version and board
すべてのArduPilotバイナリは /opt/ardupilot/ ardu [vehicle] - [ap_major_version] / binにインストール されています。 バイナリ選択にはupdate-alternativesユーティリティを使用します。 このユーティリティーは、/usr/bin/arducopter、/usr/bin/ arduplaneおよび/usr/bin/arduroverへのシンボ リックリンクを維持します。 下の例では、arducopterを使用しますが、arduplaneまたはarduroverと同様に使用できます。sudo update-alternatives --config arducopterこれは次のような出力を生成します:There are 18 choices for the alternative arducopter (providing /usr/bin/arducopter). Selection Path Priority Status ----------------------------------------------------------------------------- 0 /opt/ardupilot/navio2/arducopter-3.4/bin/arducopter-y6 50 auto 1 /opt/ardupilot/navio/arducopter-3.4/bin/arducopter-coax 50 manual 2 /opt/ardupilot/navio/arducopter-3.4/bin/arducopter-heli 50 manual ... 15 /opt/ardupilot/navio2/arducopter-3.4/bin/arducopter-quad 50 manual 16 /opt/ardupilot/navio2/arducopter-3.4/bin/arducopter-single 50 manual 17 /opt/ardupilot/navio2/arducopter-3.4/bin/arducopter-tri 50 manual * 18 /opt/ardupilot/navio2/arducopter-3.4/bin/arducopter-y6 50 manual Press enter to keep the current choice[*], or type selection number:最初の行は、デフォルトで起動される車両を示しています。 別のフレーム、ボードまたはバージョンを選択する場合は、適切なものを選択する必要があります。 たとえば、Navio 2でクワッドを作成し、ArduCopter-3.4を使用する場合は、15と入力してEnterキーを押す 必要があります。
Specifying launching options
起動オプションの指定 ファイルを開きます:$ sudo nano /etc/default/arducopter地上局のIPを指定できます。TELEM1="-A udp:127.0.0.1:14550" #TELEM2="-C /dev/ttyAMA0" # Options to pass to ArduPilot ARDUPILOT_OPTS="$TELEM1 $TELEM2" # -A is a console switch (usually this is a Wi-Fi link) # -C is a telemetry switch # Usually this is either /dev/ttyAMA0 - UART connector on your Navio # or /dev/ttyUSB0 if you're using a serial to USB convertor # -B or -E is used to specify non default GPSたとえば、次のようにIPを指すようにTELEM1を変更する必要があります。TELEM1 = " - udp:192.168.1.2:14550"192.168.1.2は、グラウンドコントロールステーションを搭載したデバイスのIPアドレスです。
ARDUPILOT_OPTSにオプションを追加すると、ArduPilotに次のような新しいTELEM環境変数を追加して渡すこと ができます。 TELEM3 = " - E /dev/ttyUSB1" ARDUPILOT_OPTS = "$ TELEM1 $ TELEM2 $ TELEM3"スイッチとシリアルポート間のマッピング(シリアルポートの代わりにTCPまたはUDPを使用できます):
-A - serial 0 (always console; default baud rate 115200) -C - serial 1 (normally telemetry 1; default baud rate 57600) 3DR Radios are configured for 57600 by default, so the simplest way to connect over them is to run with -C option. -D - serial 2 (normally telemetry 2; default baud rate 57600) -B - serial 3 (normally 1st GPS; default baud rate 38400) -E - serial 4 (normally 2st GPS; default baud rate 38400) -F - serial 5
さらに、Mission Plannerのシリアルパラメータのリストをご覧ください。 telemetryにUARTを使用する場合は、シリアルポートにデフォルトのボーレートがあることに注意してくださ い。
Reload configuration
Starting
Autostarting on boot
Connecting to the GCS
Mission Planner ⇩
QGroundControl ⇩
APM Planner ⇩
Mission Planner
QGroundControl
APM Planner
MAVProxy
Launching a custom ArduPilot binary
Ardupilot upgrade
OverviewDebianスキームを使用してソフトウェアをアップグレードします。つまり、APTを使用します。 警告:続行する前にパラメータをバックアップしてください!Upgrade$ sudo apt-get update && sudo apt-get dist-upgradeFinal thoughtsこのチュートリアルに過誤があるときは教示ください! それに応じて指示を修正して行きます。
Building ArduPilot from sources
Where to get the codeNavio2は、ArduPilotのリポジトリでサポートされています。How to buildArduPilotバイナリは、以下の2つの方法で構築できます。 1)あなたのラズベリーパイに直接。 シンプルだが、遅い。 ビルドには約15分かかります。 2)クロスコンパイラを使用する(Linux PCまたは仮想マシン上)。 これははるかに高速だが、ワンタイムセットアップが必要です。 ラズベリーパイで構築したい場合は、次のステップをスキップしてください。Cross-compiler setup on Linux (optional)推奨されるコンパイラは、Raspberry Pi Foundationによって提供されるものです。 /opt/のように、どこかでダウンロードして解凍します。Building ArduPilot using Waf build systemsudo git clone --depth 1 https://github.com/raspberrypi/tools.git /opt/toolsFor 64-bit distro add this to your PATHexport PATH=/opt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin:$PATHコンパイラを永続的に使用するためPATHに追加したい場合は、/etc/environmentを編集してください。以下の手順は、直接コンパイル、クロスコンパイルの場合も同様です。Download the ArduPilot code and update submodules:git clone https://github.com/ArduPilot/ardupilot.git cd ardupilot git submodule update --initマスターから飛び出さないように特定のタグにチェックアウトする。 gitタグを使ってタグのリストを取得する たとえば、copterバイナリを作成するには、次のようにします。git checkout ArduCopter-stableorgit checkout ArduCopter-betaWafは、ardupilotのルートディレクトリから常に呼び出されるべきであることに注意してください。 Wafへのアクセスを便利にするには、root ardupilotディレクトリから次のエイリアスを使用します。alias waf="$PWD/modules/waf/waf-light"makeベースのビルドとは異なり、Wafには使用するボードを選択する設定ステップがあります:waf configure --board=navioこれでarducopterを作ることができます。 ヘリコプターの場合、次のコマンドを使用します。k@m:~/ardupilot$ waf configure --board=navio Setting top to : /home/k/ardupilot Setting out to : /home/k/ardupilot/build Autoconfiguration : enabled Setting board to : navio Checking for program 'arm-linux-gnueabihf-ar' : /opt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-ar Using toolchain : arm-linux-gnueabihf Checking for 'g++' (C++ compiler) : /opt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-g++ Checking for 'gcc' (C compiler) : /opt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gcc Checking for program 'arm-linux-gnueabihf-pkg-config' : /opt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-pkg-config Checking for need to link with librt : necessary Checking for library rt : yes Checking for 'lttng-ust' : not found Checking for library dl : yes Checking for 'libiio' : not found Checking for HAVE_CMATH_ISFINITE : yes Checking for HAVE_CMATH_ISINF : yes Checking for HAVE_CMATH_ISNAN : yes Checking for NEED_CMATH_ISFINITE_STD_NAMESPACE : yes Checking for NEED_CMATH_ISINF_STD_NAMESPACE : no Checking for NEED_CMATH_ISNAN_STD_NAMESPACE : no Checking for header endian.h : yes Checking for header byteswap.h : yes Checking for program 'python' : /usr/bin/python Checking for python version >= 2.7.0 : 2.7.12 Source is git repository : yes Update submodules : yes Checking for program 'git' : /usr/bin/git Checking for program 'arm-linux-gnueabihf-size' : /opt/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-size Benchmarks : disabled Unit tests : enabled 'configure' finished successfully (1.934s)waf copterコンパイルの最後にardupilot-quadのような名前のバイナリがardupilot/build/navio2/bin/ディレクトリに 置かれます。詳細はArduPilotのドキュメントを参照してください。 これは最新のリファレンスですクロスコンパイラを使用している場合は、バイナリをRaspberry Piに転送します:rsync -avz ardupilot/build/navio2/bin/arducopter-quad pi@192.168.1.3:/home/pi/192.168.1.3は、Navioを使用したラズベリーパイのIPアドレスです。ArduPilotをRaspberry Piで実行し、GCSに接続する方法については、「インストールと実行」セク ションを参照してください。
ROS
Basic understanding ⇩
How to get your hands on: step by step ⇩
Preparing terminal ⇩
Basic understanding
What is ROS?
What is ROS?
ロボットオペレーティングシステムは、新しいロボットの開発を容易にするために世界中の何千ものロボット工学者の努 力をしています。 ROSはオープンソースのプロジェクトであり、数多くの有用なツールを含み、開発プロセスをより効率的にしています。 アイデアは毎回ホイールを再設計する必要がないということです。 他の誰かが既にそれをしており、おそらくあなたよりも優れているので、あなたが作りたい特定の部分にエネルギーを集 中させることができます。Overview
ここでは、Emlid Raspbianに組み込まれているROSの一般的なスキームを見て行きます。 まずは、ROSの一般的な概念を説明し、基本的な理解を迅速にするために、すべてを段階的に実行して行きます。
Emlid Raspbian images ROSがプリインストールされているので、セットアップした後で起動するだけです。 ROSを実行後は、すべてのサービスを含むROSマスター、ノードの種類のミーティングポイントなどがあります。 この場所から、ノードを見つけて、あなたのラズベリーパイにお互いに通信できるようになります。 IMUセンサーなどのデータを取得するためのノードをが存在します。 1つのノード内に異なるドライバセットが存在する可能性があります。
ノードはお互いを見つけてデータを共有することができます。 ノード間で共有されるこのデータは、「メッセージ」と呼ばれます。 ノードはメッセージをトピックに公開し、トピックを購読してメッセージを受信することができます。 ardupilotでROSを実行することを考慮しましょう。 Emlid Raspbian imagesには、mavrosノードがプリインストールされています。 このノードは、多くのセンサドライバ、アードパイロットの通信ドライバ、GCSへのプロキシを提供します。
How to get your hands on: step by step
ROS setup
ROS setup
$ echo "source /opt/ros/indigo/setup.bash" >> ~/.bashrcIntroduction to tmux
いくつかの端末からあなたのラズベリーパイを同時に召喚する必要があります。 そのため、tmuxのような端末マルチプレクサの使用をお勧めします。 ROSを使用しているときにtmuxを操作するには、いくつかの基本を学ばなければなりません。Before splitting the screen we have to create a new session
$ tmux new -s session-nameThe following commands might be useful too:
To attach to an existing session$ tmux a -t session-nameTo detach from session$ tmux detachTo kill session$ tmux kill-session -t session-name
セッション内では、何らかの形でいくつかの機能を操作してナビゲートする必要があります。 tmuxには、多くのタスクをすばやく実行できるユニバーサルショートカットがあります。Ctrl+b + ? to show hot keys Ctrl+b + $ to rename current session Ctrl+b + % to split horizontally Ctrl+b + " to split vertically Ctrl+b + o to toggle between panes Ctrl+b + x to kill the current pane
Preparing terminal
Running roscore
Running roscore
Running ardupilot$ roscoreroscoreはROSのバックボーンです。 これは、ROSを使用するときに最初に実行する必要があります。 これは、ノードの実行を成功させ、パブリッシャ/サブスクライバのアーキテクチャを機能させるために不可欠なためです。
/ etc / default / ardupilotを127.0.0.1:14650に向けるように修正sudo nano /etc/default/ardupilot
それから、$ sudo systemctl start ardupilotこのコマンドは、ArduPilotを起動します(ワンショット、sudo systemctlを有効にして永続化させる)。 LEDが点滅しています。
ardupilotが動作している間にardupilotを変更する場合は、再起動する必要があります。Running a GCS$ sudo systemctl restart ardupilot
選択したGCS(Ground Control Station)を起動します。 次のステップで、その理由を理解します。Running mavros node
ROSパッケージ内で既に説明したように、ノードと呼ばれる実行可能ファイルで作業しています。 各ROSノードには特定の機能があり、ROSクライアントライブラリを使用して他のノードと通信します。 たとえば、ArduPilotのセンサーデータに簡単にアクセスできるmavrosを実行します。 さらに、概要からのスキームによれば、mavrosは、前のステップで立ち上げた地上制御ステーションへの橋渡しとなるで しょう。Running rostopic$ rosrun mavros mavros_node \ _fcu_url:=udp://:14650@ \ _gcs_url:=udp://:14551@192.168.1.189:14550- 14650は、/ etc / default / ardupilotで指定したのと同じポートです。 - 192.168.1.189:14550はGCSが起動されているコンピュータのIPとポートです。 launchファイルを作成して、より速く起動することができます。$ roslaunch mavros custom.launchすべてが設定されたら、次のようなものが表示されます:
ロストピックツールを使用すると、ROSトピックに関する情報を入手できます。 ロストピックのサブコマンドを知るには、helpオプションを使うことができます。$ rostopic -hGCSを使用していないが、ロストピックからデータを取得する場合は、ストリームレートを設定するために次のコマンドを 入力する必要があります。$ rosservice call /mavros/set_stream_rate 0 10 1mavrosでは、最後のペインでechoコマンドを実行して、トピックに公開されているデータを表示します。$ rostopic echo /mavros/imu/datarostopic echo /mavros/を入力した後、タップすると、既存のトピックのリストが表示され、より多くの情報を取得する ことができます。
Navio for developers
Video streaming ⇩
Wi-Fi Broadcast ⇩
Examples setup ⇩
Barometer ⇩
ADC ⇩
PWM output ⇩
RC input ⇩
9DOF IMU ⇩
AHRS ⇩
GPS ⇩
GPS via u-center ⇩
FRAM ⇩
RGB LED ⇩
Datasheets ⇩
Video streaming
Video Streaming with Navio2 Hardware Raspberry PI2 UbuntuUbuntu PCにストリームするniha 以下のパッケージをローカルにインストールする$ sudo apt-get update $ sudo apt-get install gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-badAndroidAndroid用QGroundControlをダウンロードしてインストールします。 設定であなたのデバイスのIPアドレスを見つけてください。 RPiからphoneに接続するためにそれが必要になります。 IPを使ってArduPilotを実行してください。 QGroundControlを実行すると、自動的に車両が検出されます。 ラズベリーでビデオストリーミングを起動すると、アプリケーション画面の左下に画像が表示され ます。 フルスクリーンモードを実行するには、タップします。 注:QGCアプリケーションのビデオのデフォルトポートは5600です。Mac OS X Windows Launching 起動 On your computer
Ubuntu$ gst-launch-1.0 -v udpsrc port=9000 caps='application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264' ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=fコンピュータは、Raspberry PI2からの入力ストリームを待っています。 ストリームが取得されると、無人機からのリアルタイムビデオが表示されます。 On Raspberryraspivid -n -w 1280 -h 720 -b 1000000 -fps 15 -t 0 -o - | gst-launch-1.0 -v fdsrc ! h264parse ! rtph264pay config-interval=10 pt=96 ! udpsink host=ここでport=9000 はストリーミング先のデバイスのIPです。 ビデオが遅れている場合は、-bスイッチまたは-fpsでビットレートを調整します。
Wi-Fi Broadcast Emlid Raspbian imagesには、WBCがプリインストールされています。
What is Wi-Fi broadcast? Wi-Fiブロードキャストとは何ですか?
Configuration
What is Wi-Fi broadcast? Wi-Fiブロードキャストとは何ですか?
Wifibroadcastは、Wi-Fiラジオを使用したHDビデオ(およびその他の)データのライブ伝送を目的としたプロ ジェクトです。 1つの顕著な使用事例は、遠隔操作される航空機の第1人物視界(FPV)のためのカメラ画像を送信することであ る。 通常のWi-Fi接続とは対照的に、Wifibroadcastは、アナログリンクの優位な特性(優雅な信号劣化、単方向 データフローなど)を模倣しようとします。 Wifibroadcastは、無線LANカードをモニタモードにします。 このモードでは、デバイス間の関連なしに任意のパケットを送受信できます。 さらに、(チェックサムが一致しない)誤ったフレームを受信することも可能です。Overview 概要
トランスミッタのハードウェア構成:Wi-FiカードRaspberry Pi Wi-Fi card compatible with wifibroadcast Cameraレシーバーハードウェア構成:Raspberry Pi Wi-Fi card compatible with wifibroadcast Display
電源すべてのwifiカードがwifibroadcastと互換性があるわけではありません。 これは、wifibroadcastが多くのwifiチップセットで完全にサポートされていない注入モードを使用 するためです。2.4GHz 警告2.4GhzはRCで使用されるため、注意して使用する必要があります。 RCトランスミッタがWi-Fiブロードキャスト対応ドングルに干渉しないことを確認してください。 リスクを完全に排除するために5Ghzドングルを使用することを検討してください。推奨ドングル:TP-LINK TL-WN722N Alfa AWUS036NHAここでこのチップを使ったwifiカードのリストを見つけることができます。
5GHz5GHz動作の場合、Ralink RT5572ベースのデバイスがそのまま使用できるので推奨されています。推奨ドングル:CSL-300: ALFA AWUS051NH v2 TP-LINK TL-WDN3200より多くのカードについてはここを参照してください。
トランスミッタHow to get your hands on: step by stepNavioの "POWER"ポートに接続された電源モジュールによって給電される必要があります。 NavioはRaspberry Piにパワーを供給します。受信機5V 1A電源アダプタをRaspberry PiのmicroUSBポートに接続します。 ノートパソコンのUSBポートから電源を供給しないでください。
Configuration
Wi-Fiブロードキャスト設定は /etc/default/wbcに保存されています。 ブロードキャスト設定を調整する必要がある場合は、このファイルを変更します。レシーバーの設定$ cat /etc/default/wbc#!/bin/bash # Camera image settings WIDTH=1280 HEIGHT=720 FPS=48 BITRATE=4000000 KEYFRAMERATE=48 # Transmission and recording settings CHANNEL2G="13" CHANNEL5G="13" NICS=`ls /sys/class/net | grep wlan` SAVE_PATH="/media/usb0/video" ################################## #change these only if you know what you are doing (and remember to change them on both sides) BLOCK_SIZE=8 FECS=4 PACKET_LENGTH=1024 PORT=0 ##################################
受信機でブロードキャストを開始するには:トランスミッタの設定sudo systemctl start wbcrxd
送信機で放送を開始するには:sudo systemctl start wbctxd
Examples setup
Downloading drivers and examples
Downloading drivers and examples
NAVIO2Repository structuregit clone https://github.com/emlid/Navio2.git cd Navio2NVIO+git clone https://github.com/emlid/Navio.git cd Navio
C++- Examples C ++を使用したNavioのオンボードデバイスの操作方法を示す基本的な例PythonAccelGyroMag ADC AHRS Barometer GPS LED 2 RCInput Servo- Navio Navioのオンボードデバイスと周辺機器インタフェース用のC ++ドライバMPU9250 SPI LSM9DS1 SPI U-blox SPI MS5611 I2C I2C driver SPI driverBasic examples showing how to work with Navio's onboard devices using Python. AccelGyroMag ADC Barometer GPS LED RCInput ServoUtilitiesApplications and utilities for Navio2. 3D IMU visualizer U-blox SPI to PTY bridge utility U-blox SPI to TCP bridge utility
Changelogs
2017-03-23: ArduPilot:3.4.6 ArduPlane:3.7.1 APMrover2:3.1.2 ardupilot.service:0.9.0 Wi-Fiブロードキャストのサポート プリインストールされたROSindigo ros-indigo-mavrosは更新を阻止するために取り消されています。 ROS Indigoは、いくつかのBoostエラー処理を適切に処理しない0.17.xバージョンのmavrosに依存しています。 したがって、いくつかのサルのパッチが必要です。 Emlidの配布を公式のRaspbianに完全に準拠させる これは、libraspberrypi0とraspberrypi-bootloaderに依存するすべてのパッケージが期待通りに動作すること を意味します。 たとえば、sudo apt-get install python-picameraが動作します。 python3、python3-pip、mavproxy、droneapi、tmuxを追加する emlitool:0.8.6 rcio-dkmsの修正アップデート: 新しいカーネルではrcio.dtboが再生成されない可能性があります。 後者は現在、raspberrypi-kernel-emlidパッケージの一部です。 /boot/wpa_supplicant.confの最初の起動後に消える問題の修正 その他のバグ修正
Community projects
Windows IoT
設定
基礎
応用
実用