ArduPilot開発のための実機を作る(Navio2前編)

ArduPilotに新しい機能を実装してシミューターで動作検証しているけど、そろそろ実機で検証したい!というニーズもあると思います。

この記事では、Navio2を用いて実機を作る手順をhttps://docs.emlid.com/navio2/(英語)に基づいて組み立てるときの気を付けるべきポイントを説明していきます。

【注意事項】

・パーツリンクは参考のために張っているので動作保証は一切しません。リンク先はHobbyKingです。

・一部、やり方を変えている部分はありますのでご注意ください。

・筆者は小型のドローンが好きです。

【更新履歴】

2017/03/12 apt-get upgradeの実行禁止

2017/02/26 ラズベリーパイへのリモートログインについて

2017/03/03 誤記修正

前提条件と作業の流れ

この記事では、Navio2を使用してクアッドコプターの組み立てを前提としています。

  1. ハードウェアセットアップ
  2. ラズベリーパイセットアップ
  3. ArduPilotセットアップ
  4. MissionPlannerに接続して設定・キャリブレーション(この記事に含まず、後編でまとめます)

作業開始

作業するにあたって、半田ごて、半田線、半田吸い取り線、ニッパー、ストリッパー、ピンセットなどの工具、ラズベリーパイの設定にUSB-MicroUSBケーブル、HDMIケーブル(オス-オス)、USBキーボード、HDMI対応ディスプレイがある前提としています。ぜひ、ご準備ください。

ハードウェアセットアップ
完成イメージ

まずはこれから作っていくドローンのイメージを掴んでもらうために完成したドローンの写真をみてください。小さいのが好きなので結果的に270㎜(対角モーター距離)、総重量590gになりました。余分な線を取ったり、余計なパーツを取ればもう少し軽くすることができると思います。

完成イメージ前向き

完成イメージ前向き

完成イメージ後ろ向き

完成イメージ後ろ向き

完成イメージ重さ

完成イメージ重さ

 

 

 

 

 

 

 

 

 

配線イメージ

配線イメージは下の図の通りです。シンプルな配線です。バッテリーから入ってきた電気をフライトコントローラーとESCに配っています。今回は私が作ったドローンにはテレメトリー送信機(黒いアンテナがついてるもの)は付いていません。

配線イメージ”公式ページより引用”

配線イメージ”公式ページより引用”

モーターとESCを接続、モーター回転方向

ESCの黒い線が3本出ている方と、モーターから出ている3本の線を接続します。購入したパーツの説明書をみて結線してください。よくあるのは、モーターの回転方向を間違えてしまうことです。例えば、上の図だとモーターとESCが向かう線をそれぞれ結線していますが、実際にはカウンタクロック(逆時計)方向に回転させるにはどれか2本クロスさせる必要があります。クアッドコプターの場合は、前向きと後ろ向きにそれぞれ内側に渦巻くような回転をさせる必要がありますから。

モーターの回転方向”公式ページより引用”

モーターの回転方向”公式ページより引用”

 

CW(時計回り)

CW(時計回り)

CCW(反時計回り)

CCW(反時計回り)

もしも、回転方向を間違えてしまった場合は、焦らず繋がっている3本の線のうち2本を半田で外してから入れ替えて再結線してください。

左側の図を参考にしてください。ただし、これもお使いのESCとモーターの仕様をよく確認してくださいね。

 

 

 

 

 

 

【注意ポイント】BEC付きESCを2個以上接続してはいけません。公式ページより”Only one ESC power wire (central) should be connected to Navio2 servo rail, otherwise BECs built in ESCs will heat each other.”と書いてあるためです。

私も実際この注意事項を見逃したおかげでうまくいきませんでした。なので私は、写真のようにVCC線(赤色の線)をカットして対応しました。4つのESCすべての赤い線をカットしてあります。

ESCのVCC線カット

ESCのVCC線カット

配電盤にESC、バッテリプラグを付ける

上の配線イメージではバッテリーから4つのESCが並列で繋がっていますが、実際には配電盤(PDB)と呼ばれるボードを使った方がいいでしょう。配電盤は入力電圧範囲、出力電圧、接続可能なESCの個数、電流などを確認して、使用するバッテリー、モーターに合っているものを選んでください。

ESCから出ている赤色と黒色の線をPDBの+とーのパットに半田付けしてください。赤を+黒をーに。PDBを固定する向きとモーターの配置を考慮して一番近いパットにつけてください。この時、フレームにあとでどのように固定するかを考えて余った線をカットしておくとコンパクト(軽量化にも貢献)になります。

PDBとESC、バッテリプラグの接続

PDBとESC、バッテリプラグの接続

Navio2についてくるバッテリープラグはXT60です。PDBのバッテリーを接続する部分に受け側(オス)のXT60プラグを線でつけてください。上の完成イメージ後ろ向きを見ると奥のPDB(写真では見えないですが)からプラグが出ていて、Navio2付属のプラグに接続しています。

これであとESCから出ている残っている線はNavio2本体に接続するものだけになっているはずです。

フライトコントローラーの組み立て

Navio2は以下のラズベリーパイで動作します。組み立てもすごく簡単です。以下の図を参考にして組み立ててください。

  • Raspberry Pi 3 Model B
  • Raspberry Pi 2 Model B
Navio2をラズベリーパイに装着”公式ページより引用”

Navio2をラズベリーパイに装着”公式ページより引用”

【注意ポイント】GPIOピンに挿すときすごく硬いのでピンを折らないように気を付けてください。

受信機接続

Navio2の受信機接続ピンが1つだけなので、SBUS対応の受信機が必要になります。私が使っているのはFUTABAのT10Jの送受信機をつかっています。受信機を接続する線は3本(赤色:+、黒色:-、オレンジ色など:信号)一体になっています。下の図のようにNavio2を前向きにして、一番左側のピンに上から信号、+、-の順番になるように差し込みます。

受信機接続”公式ページより引用”

受信機接続”公式ページより引用”

【注意ポイント】T10Jの受信機だとSBUSは横向きに接続するポートです。

GPS接続

付属のGPSを下の図のように接続します。実際にフレームに固定する時は可能な限り上の方に配置しましょう。

GPS接続”公式ページより引用”

GPS接続”公式ページより引用”

ESCの接続

ArduPilotのモーター配置についてはこちらのページを参照してください。X型クアッドコプターは「〆の字」を書くように配置します。なので、最後にESCから出ている線を、Navio2を前向きにして、右上を1、左下を2、左上を3、右下を4のピンに挿してください。受信機接続と同じ要領で上側が信号線になるようにしてください。

ArduPilotのモーター配置図”公式ページより引用”

ArduPilotのモーター配置図”公式ページより引用”

電源プラグの接続

下の写真のように付属の電源プラグの6本細い線がでている端子をNavio2のPower端子に接続してください。

XT60メス側PDBから出ているオス側に接続しておきます。残っているオス端子はバッテリーに接続する用です。

電源プラグ接続”公式ページより引用”

電源プラグ接続”公式ページより引用”

【注意ポイント】端子の向きに気を付けてください。結構きつくくっつくので取る時に断線などに気を付けながら慎重に取ってください。

フレーム組み立て

すべての動作が確認できてから、最後にフレームにパーツを固定していってください。余っている線をくるくる巻いたり、束ねたりなどしてきれいに組み立てましょう。

今回フレームはRoboCat(270㎜)を使いました。ラズベリーパイがぴったり収まっちゃうところが気に入りました。

RoboCatの組み立てについてはYoutube動画を見ていただいた方が分かりやすいと思います。

フレームについて好みがあったり、指定があるので組み立てについては割愛します。

気圧センサーをUVから守る

写真のようにスポンジなどで気圧センサーを覆ってあげてください。

気圧センサーの保護”公式ページより引用”

気圧センサーの保護”公式ページより引用”

振動軽減のために

今回私は使用していませんが、フライトコントローラダウンピングプラットフォームなる振動軽減装置があります。これを使ってフライトコントローラー(ラズベリーパイ+Navio2)を固定しておくと余計な振動が伝わるのを抑えてくれると思います。

私は今回は手持ちのハネナイトシートを使ったんですが若干振動が見られるのでプラットフォームを買おうかと考えています。

ラズベリーパイセットアップ

組み立てお疲れさまでした。起動まであと一歩です。ここからはソフトウェアの準備です。

SDカードにOSイメージを書き込む

提供されるOSにGUI(グラフィカル機能)がないがないためコマンド操作が必要になります。

  • OSのイメージはバージョンアップの可能性があるので直接公式ページからダウンロード
  • リンク先のページ上部にある”Emlid Raspbian Image”の部分をクリック(※解凍しない)
OSイメージダウンロード

OSイメージダウンロード

  • SD書き込みツール”Etcher”(Mac/Win/Linux対応)をダウンロードしてインストール
  • SDカードをPCに挿す
  • Etcherを起動し、ダウンロードしたOSのファイルを選択、書き込み先デバイスを選択
  • 間違っていないことを確認し書き込みを開始
  • 書き込みが完了したらSDカードをラズベリーパイに装着

Etcherの使い方は非常にシンプルです。不安な方は、動画で確認してください。

ラズベリーパイ設定準備
  • HDMIケーブルでラズベリーパイとディスプレイを接続
  • USBキーボードをラズベリーパイのUSBポートに接続
  • USB-MicroUSBケーブルのUSBをパソコン側、MicroUSBをラズベリーパイのMicroUSBポートに接続
  • ラズベリーパイが起動したら、ユーザ名”pi”、パスワード”raspberry”でログイン

パソコンの電源が入っていればラズベリーパイが起動し、ディスプレイに表示されます。

ラズベリーパイをWi-Fiに接続

有線LANに接続してもいいのですが、後の操作を考えると無線設定しておいた方が便利です。

事前に接続するWi-FiのSSIDとアクセスキーを確認してください。ここでは例として、SSIDを”drone“、パスワードを”techblog1234“として説明します。必ずご自身の環境に合わせて、SSIDとパスワードの部分を変えてください。

ラズベリーパイにログインができた状態で次のコマンドを実行すれば一発で設定が完了します。

$sudo bash -c "wpa_passphrase drone techblog1234 >> /boot/wpa_supplicant.conf"

ラズベリーパイを再起動してください。

$sudo reboot

再起動後、ログインしてIPアドレスが取得できていることを確認してください。

【注意ポイント】まだHDMIケーブル、USBキーボードでつなげっぱなしにしておいてください。

【問題点】このやり方は問題点があります。ほとんどのWi-FiルータがDHCPに則って自動でIPアドレスを割り振る設定だと思います。これだとIPアドレスが固定されないのでリモートログイン時にアクセス先がわかりません。いろいろ解決方法はありますが、ひとまずルーターで固定IPを割り振るように固定にしておくといいかもしれません。もしくは、nmapコマンドでホストを探す方法もあります。ここらへんの問題についてはまた別の記事にまとめたいと思います。

↓↓解決しました 2017/2/26更新分↓↓

Navio2用のOSイメージでは、デフォルトでAvahi-daemonが動いています。これは上記の問題を解決してくれます。接続するラズベリーパイのIPアドレスが分からなくてもローカルで通用するドメイン名から解決できます。この記事を書いているのがWindows 10のマシンで、このやり方ができなったので問題点として挙げましたが、一部の方から指摘をいただいたので更新します。

ラズベリーパイ側はすべて設定済みの状態になっています。”navio.local”で解決できるような設定になっています。Macからは問題なくアクセスできましたが、Windows 10マシンがやっかいでした。いくつか試しましたが結局、アップルが提供しているBonjour Print Services (Windows)をインストールすることで解決できました。インストール時にプリンターの更新とかっていうオプションは外して問題ありませんでした。

これで、PuttyJPでもTeraTermからでもホスト名”navio.local”でリモートアクセスできます。

↑↑2017/2/26更新分↑↑

$ifconfig

...

...192.168.xxx.yyy...

...
OSの更新

接続できていたら、次はアップデート作業をします。少し時間がかかります。途中で、Y/Nと聞いてくる部分があるので、Yと入力してエンターキーを押してください。

sudo apt-get update && sudo apt-get dist-upgrade

【注意ポイント】養成塾メンバーからこのコマンドでエラーを起こすという報告がありました。これも必ずエラーになるとも限らず不明なままです。エラーになった方は次のコマンドで更新してみてください。このコマンドは絶対に実行しないでください!

sudo apt-get update && sudo apt-get upgrade
リモートアクセス”SSH”の設定(任意)

開発中はラズベリーパイにアクセスして作業したことが度々発生すると思います。その度にラズベリーパイをディスプレイに接続して、USBキーボードを接続してっていう作業がすごく面倒で手間になります。

それをしなくてもいいようにリモートアクセスでログインして作業ができるようにします。次のコマンドではviを使っていますが、nanoでも何でもいいです、使い慣れているエディタでSSHサーバの設定を編集します。

$sudo vi /etc/ssh/sshd_config

デフォルトでパスワードによるログインを無効にされています。恐らくセキュリティを考慮してのことだと思います。開発機としてはシンプルにパスワードにログインが便利なのでそれを有効にします。

以下の設定があることを確認してください。デフォルトではnoになっているかコメントアウトされています。

PasswordAuthentication no → yes
↑もし先頭に#が付いていたらそれを消してください。消さないと有効になりません。

保存したら、ラズベリーパイを再起動してから別のPCからSSH接続ができるようになります。

ログインできない場合は、Wi-Fi接続設定の確認、SSHサーバの設定ファイルの確認をもう一度してください。

ArduPilotセットアップ

ラズベリーパイのセットアップもお疲れ様でした。ここからはいよいよフライトコントローラーソフトウェアのセットアップをしていきます。

ArduCopterのダウンロード

ラズベリーパイにログインして以下のコマンドでArduPilotのコプター用ソフトウェアをダウンロードしてください。ダウンロードしたら実行できるように権限を与えます。

$ cd ~
$ wget http://firmware.eu.ardupilot.org/Copter/stable/navio2-quad/arducopter-quad
$ chmod +x arducopter-quad

ArduCopterの起動

起動する方法は2つあります。手動自動です。確認する程度であれば手動でいいです。実際にはラズベリーパイ起動とともに自動起動するように設定します。

【手動起動したい場合】

ここで指定している”192.168.1.2”の部分は、あとで設定するMissionPlanner(GCS)が起動しているほかのPCのIPアドレスです。

$ cd ~
$ sudo ./arducopter-quad -A udp:192.168.1.2:14550 

いろいろオプションがあります。まだ試してないので説明は省きますが参考までに。

Mapping between switches and serial ports (TCP or UDP can be used instead of serial ports):

  • -A – serial 0 (always console; default baud rate 115200)
  • -C – serial 1 (normally telemetry 1; default baud rate 57600)
  • -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

【自動起動したい場合※推奨】

公式ページでは、/etc/rc.localファイルに書き込むような説明をしていますが、ここではSystemdに則ってサービスファイルを作成してやります。

手順1 /etc/systemd/system/ardupilot.serviceファイルを作成してください。

[Unit]
Description = ArduCopter
After=syslog.target network.target

[Service]
ExecStart=/bin/bash /home/pi/copter_start.sh
Restart=always
Type=forking
User=root
Group=root

[Install]
WantedBy=multi-user.target

私の実際の設定の画像です。パスが少し違うのは各自の環境に合わせて変えてください。

手順2 /home/pi/copter_start.shファイルを作成してください。
ファイルの内容は以下の通りです。もちろん、IPアドレスは各自の環境に合わせてください。
sudo nohup /home/pi/arducopter-quad -A udp:192.168.10.23:14550 > /home/pi/startup_log &

手順3 サービスを確認して有効にします。

$ sudo systemctl list-unit-files --type=service
※作成したardupilot.serviceが表示されることを確認してください。
$ sudo systemctl enable ardupilot
※再起動する前に手動で以下のコマンドでサービスを起動して動作確認してください。
$ sudo systemctl start ardupilot

手順4 起動モードをmulti-userに変更します。

$ sudo systemctl set-default multi-user.target

これで次回以降、ラズベリーパイの起動するとコプタープログラムも起動して飛ぶ!かと思いきや飛びません。

まだ設定、キャリブレーションが終わっていないので…

一回の記事で飛ぶところまで行かずすみません。ちょっと記事が長くて疲れてきました。

次回、後編で設定・キャリブレーションのやり方を説明します。お楽しみに。

なお、間違いなどありましたら遠慮なくご指摘ください。オープンソースは皆さんの力で改善されるので。

著者紹介

川村剛(かわむらつよし)
ドローンソフトウェアエンジニア養成塾 第2期卒業生。

記事の誤りを見つけた方は下記のメールアドレスまでご連絡ください。
techblog@drone-j.com
(週末にメールを確認していますので、対応が遅くなること、休みの日にメールを返信させていただくこと、ご了承ください。)