2020/10/19
[Dronecode]PX4でHello Sky
概要
最近Droneを自作するプロジェクトに興味を持ち、空き時間を使って入門してみました。
基本的にはDronecodeというオープンソースのプロジェクトを流用させていただき、開発していこうと考えています。
既製品のDroneを使ってサービスを展開する場合にはDJI製品を使うのが良さそうなのですが
Drone自体の自作となると、オープンソースのものをうまく組合せて作るのが良さそうです。
今回は、DronecodeのコアであるPX4というプロジェクトのtutorialを実際にやって理解を深めてみました。
PX4はフライトコントローラーというDroneの自動飛行を制御するためのもののようです。
スマホアプリやラジコンのコントローラーなどからの指令(信号)を受信し、それを解釈してプロペラの制御を行ったりする部分のようです。
(まだ入門して日が浅いので間違ったことを行っているかもしれません🙇♂️)
DronecodeにはフライトコントローラーであるPX4の他に QGroundControlやMAVLINKと呼ばれるプロジェクトがあります。
- QGroundControlは “Cross-platform ground control station” つまり地上(管制塔)からの指令プログラムを作るためのプラットフォームみたいです。
- MAVLINKは “Micro Air Vehicle Message Marshalling Library” つまりコントローラー〜Drone間の通信手段を定義しているライブラリのようです
MAVLINKをわざわざ定義している理由は、以下のようなものだと想像されます
- Droneに載せれるコンピューティングリソースには限りがある(重量とか電圧とか)ためメモリが少ない環境でも動作できる
- Droneと通信できる通信帯域幅が限られている(ハードウェア的にも法律的にも)
今回はあまり深く考えず、Hello Sky - PX4 Autopilotにある記事に従って
チュートリアルをやってみたので、それの作業メモになります。
実施事項
Ubuntuマシンの準備
UbuntuのLiveUSBを作成しました。
こちらで作ったUSBを使って、もうほとんど起動することがなくなった、お古のPCにインストールしてUbuntuのマシーンを準備しました。
(機械学習などにも使えるUbuntu用の自作PCを構築準備していて、そちらが出来次第、そちらでも環境構築しようと思っています。)
Toolchainのインストール
以下を参考にしつつ、PX4で使うツール群のインストールを行いました。
- https://dev.px4.io/master/en/setup/dev_env_linux_ubuntu.html
- 💻 Setting up your PX4 development environment on Linux — Getting Started with Drone Development - YouTube
gitをインストールします
$ sudo apt-get upgrade -y
$ sudo apt-get update -y
$ sudo apt-get install -y git
PX4/Firmwareのsetupスクリプトを実行します
$ git clone https://github.com/PX4/Firmware.git --recursive
$ cd Firmware
$ bash ./Tools/setup/ubuntu.sh
$ sudo reboot now
jmavsimの起動
$ cd Firmware # Firmwareのプロジェクトルートディレクトリ
$ make px4_sitl jmavsim
pxh> commander takeoff # シミュレーター上で離陸するのが確認できました
pxh> commander land # シミュレーター上で着陸するのが確認できました
↓こんな感じのGUIが起動します
gazeboの起動
$ cd Firmware # Firmwareのプロジェクトルートディレクトリ
$ make px4_sitl gazebo
pxh> commander takeoff # シミュレーター上で離陸するのが確認できました
pxh> commander land # シミュレーター上で着陸するのが確認できました
Pythonコードの記述
MAVSDK-Pythonのインストール
$ pip3 install --user mavsdk
$ pip3 install --user aioconsole # light wightなinteractive shellであるaioconsoleもついでにインストール
protobufのインストール
古いバージョンを使っていると、後述のfrom mavsdk import System
の箇所でエラーになったので新しいものをインストールする必要がありました。
$ pip3 install --upgrade protobuf
$ pip3 show protobuf
Name: protobuf
Version: 3.13.0
..(省略)..
Python Script
事前にmake px4_sitl jmavsim
のコマンドを使って、裏でjava baseのシミュレーターを起動しておきます。
apython
でinteractive shellを起動して以下を実行しました。
from mavsdk import System
drone = System()
await drone.connect()
await drone.action.arm()
await drone.action.takeoff() # armした後、すぐにこのコマンドを送らないと Disarmed by auto preflight disarming とログが出て制御できなくなってうようなので注意
await drone.action.land()
ログの確認
$ cd Firmware # Firmwareのプロジェクトルートディレクトリ
$ find . -name *.ulg
./build/px4_sitl_default/tmp/rootfs/log/20-10-19/12_48_13.ulg
$ ulog_info ./build/px4_sitl_default/tmp/rootfs/log/20-10-19/12_48_13.ulg
Logging start time: 0:02:46, duration: 0:00:26
No Dropouts
SW Version: v1.11.0 (RC)
Info Messages:
sys_name: PX4
sys_os_name: Linux
sys_os_ver_release: 84148479
..(以下省略)..
所感
Simulationに関しては、以下のような感じのフローで実施できました。
- PX4のsimulatorを起動する(今回はjmavsim)
- MAVSDKを使って、droneにコマンドを送信して制御する
- simulatorのログを使って、飛行状況を解析する
例えば、自作のドローンを作って、特殊な部品をつけてシミュレーションしたい場合
以下のような感じになるんでしょうか・・・イバラの道ですかね・・
- Firmwareをアタッチしたいハードウェア用に修正する
- simulatorで使えるようにする
- MAVLINK/MAVSDKのメッセージで制御できるようにする
- 適切にログを出力し、出力されたログデータを解析して意図通りに動作しているかチェックする
特にNo.1と2が大変そうですね。。。😱
次のstepとしては、
- Devkitsを買ってみて、実際に動かしてみる
- 細かく、シミュレーションするやり方を学習する(ROSベースのものが良さそう?)
こんなところでしょうか。
ちょっと学習コスト高そうですが、ゆっくりで良いので、ちょっとずつ進めていこうと思います。
以上です。
関連する記事
X1 Pocket ⅡでLiPoバッテリーを充電&保管用に放電
ドローンに使用するリチウムポリマーバッテリーを専用バッテリーで充電・放電を行いました
[Ubuntu20.04]QGroundControlのビルド〜Firmwareアップデート
QGround Controlをソースコードからビルドしてインストールし、Flight ControllerのFirmwareのアップデートまでを試してみました
ROS2とPX4の連携環境準備
PX4とROS2の連携を試せる環境をUbuntu20.04で整えました
[Ubuntu20.04]Gazebo simulator上のDroneをMAVROSを使って動かす
MAVROSを使ったTutorialを実際に動かしてみました