Raspberry Pi Zero で自律飛行ドローンを作るぞ(第4回:気圧センサで高度を維持させる)


はじめに

前回のRaspberry Pi Zero で自律飛行ドローンを作るぞ(第3回:フライトコントローラを使いました...) では、フライトコントローラのpitch,roll,yaw姿勢制御のおかげでRaspberry Piからのスロットル操作で浮上させることができました。

今回は

設定した高度を維持する制御にトライしてみました。

距離センサ(VL53L0X)を使用して地上高400mmをkeepする。

結果:スロットルを少し下げると一気に降下してしまいます。降下を検知してスロットルを上げるのですがそのレスポンスが悪く大きく上下にふらついてしまいます。何度か値を調整しましたが結果は良くありませんでした。

動画はこちら(YouTube)

気圧センサ内蔵のフライトコントローラを使用して高度を維持させる。

制御プログラム改善の前に試してみたいのがフライトコントローラに内蔵の気圧センサの力を借りることです。
今使用しているフライトコントローラ(CC3D)は気圧センサは付いていないので、気圧センサ内蔵のフライトコントローラ(NAZE32)を使うことにしました。フライトコントローラ設定用アプリはCleanflightを使用します。※フライトコントローラの設定については割愛します。

↓構成は以下の通り。NAZE32はarm(アーミング)操作が必要なので制御信号を追加しています。baro(気圧センサ)制御信号も別で追加しています。

結果:スロットル操作した時の降下と上昇が緩やかになった感じです。もう少し検証を続けますが気圧センサの効果はありそうです。下図は高度400mmを検知してスロットル制御をしているのですが、実際は750mm付近で高度が維持されているのがわかります。

設定値
#define MINIMUM_GROUND_CLEARANCE    40 //最小地上高
#define MAXIMUM_GROUND_CLEARANCE    400 //最大地上高
#define DEBUG_MAINLOOP_TO           7 //デバッグ用メインループタイムアウト指定(sec)
#define FLIGHT_TIME                 5 //DEBUG_MAINLOOP_TO - FLIGHT_TIME = landing time
#define OFFSET_POWER                600
#define LANDING_POWER               450

動画はこちら(YouTube)

今回検証した機体の外観

  • 表側

  • 裏側

今回の感想

気圧センサはあくまでも補助なのだと感じましたので、次にやることは高度制御プログラム改善を考えています。

コード(GitHub)

追記