GoProとフライトコントローラーの中継テスト

プログラミング
image_print

フライトコントローラーの設定

フライトコントローラーのシャッター信号(AUX GPIOに出てくる)を監視し、それに応じてRaspberry PIからGoProにシャッター信号を送ればいいわけです。

ミッションプランナーとPixhawkを接続します。

関係するパラメーターはいくつもあります。

CAM1_TYPE=2

でPWMではなく、リレーのような電圧変化を使うとします。(リレー)

次にどのフライトコントローラーのGPIOピンをシャッターに使うかを定義します。
ここでAUXOUT1-AUXOUT6までが書かれていますが、ここに相当します。
これはミッションプランナーではSERVO09からSERVO14に相当します。

「PixhawkではAUX5とAUX6がデフォルトでGPIOである」という記述があるので、ここではAUX5(SERVO13)を使います。(図の白い番号がAUXの番号です。

まず

RELAY1_FUNCTION=4  (CAMERA)

とします。
フライトコントローラーをリブートします。するとRELAY1_PINがどれかの設定が可能となりますから

RELAY1_PIN = 54 (AUXOUT5)

をセットします。
SERVO13ですから、

SERVO13_FUNCTION = -1 (GPIO)

これらのパラメーターを書き込むことを忘れないで、次に進みます。

「初期設定」-> 「オプションハードウェア」-> 「カメラジンバル」の画面に移動します。

シャッターは「リレー」になっているはずです。

シャッターの押した状態は1800、押した状態は1100を設定します。(ラジオキャリブレーションでチャネル6で得た数値よりも小さく)

プロポのスイッチを割り当てます.(なぜかチャネル7でないとシャッターにならないのです)

RC6_OPTION=9   (Camera Trigger) 

ミッションコントローラーの「フライトデータ」ではServo/Relayがあるので、そこで動作させることはできます。
プロポのスイッチRC6=スイッチBを倒すとメッセージに「Camera Shutter ON] のようなメッセージがでます。

どこにも明記されていませんが、上記設定によりAUX OUT5は次のような電圧パルスを発生します。
パルス幅はシャッターオンの定義で変更可能です。

Camera Controls — Copter documentation

カメラのプロセスが極めて早く終わればこれでいいのですが、数秒以上かかる場合は次のパラメータを検討する必要があります。

CAM1_INTRVAL_MIN=

写真と写真の間のインターバルの最小値を指定します。0から10秒が指定できます。

Raspberry Piの設定

まずフライトコントローラーと接続する2Pのケーブルを作成します。
どのピンでON/OFFを受けるかを決めます。
ピンのレイアウトはhttps://pinout.xyz/を見ましょう。

ピン1,3,5,7,9はAQM0802を取り付けた場合には使うので避けます。
ピン6,17はファンのために。
一番端のピン37,39 (GPIO26とGND)を選定しました。

デジタル回路のスイッチ

デジタル回路のスイッチはオンかオフか、一般的には(5Vか3.3V)か, 0Vかどちらかの値を明示的に持たねばなりません。つまり次のような回路が必ず要求されます。

 

普段は電源から数十キロオームの抵抗を介して入力にオンの状態を設定しておきます。
スイッチが押されると、電気は抵抗のないグランドに流れますから0Vとなります。
この抵抗を「吊り上げている抵抗」という意味でプルアップ抵抗といいます。プルアップ抵抗は外部回路と用意しなくても、使われることがわかりきっているのでCPU側であらかじめ用意されていることもあります。

逆にプルダウンというやり方もあります。

普段はアースとGPIOが接続されています。
スイッチが入るとGPIOに電圧が加わります。
抵抗がないと、ショート状態になってしまうことに気づいてください。
この抵抗もCPU側で用意してくれます。

プルダウンはいろいろと問題を含みます。
Raspberry PIもそうですが、完全な0Vは難しいのです。
ノイズが入ったりして、数十ミリボルトくらいの電圧が配線に乗りがちです。

このためデジタル回路はオフとみなす範囲、オンとみなす範囲をもっています。

  • 0-0.8V(0-80mV)くらいまではオフ
  • 0.8V-1.3V 不定
  • 1.3-3.3V オン

そのためスイッチなどではプルアップが好まれますが、信号を送る場合はプルダウンが使われます。

さて、GPIOの電圧検知についてPythonで習作を書きます。

from gpiozero import Button

pin_number=26

def pressed_callback():
    print("26 detected")

button=Button(pin_number, pull_up=False)
button.when_pressed = pressed_callback

try:
    while True:
        pass
except KeyboardInterrupt:
    print("END")

このプログラムでフライトコントローラーのAUX5をRaspberry Pi GPIO26に繋ぎます。GND同士も接続します。

Mission Plannerのフライト・データ画面でボートをクリックし”カメラトリガー”をクリックすると、AUX5のピンの電圧があがります。Raspberry PIはその変化をピン割り込みを検知し、”26 detected”が出力されます。

この基本的なテストはフライトコントローラーごとにやってみたほうがいいです。上の写真はPixhawk2.4の場合ですが、下はPixhawk6xです。AUXピンのレイアウトがまるで違います。

 

 

 

タイトルとURLをコピーしました