今日わかった大切なことを記録しておく。
PX4というのは、複雑なシステムで、例えば https://slideplayer.com/slide/17893046/ からお借りした図を貼り付けると、
こんな感じになるようだが、ぱっと見わかりにくい。フライトコントローラーをどうやってコンピュータから制御するのかというのがポイントだが、QGroundControllerからでも一部できたりするし、MAVSDKにはより詳しいコマンドが掲載されている。しかし、今日わかったのは、MAVSDKとかQGroundControllerよりも基礎的なコマンドシステムになっているということだ。
今日までは、まあ、詳しいリファレンスのあるシステムである、MAVSDKで必要なプログラムを書こうとしていた。まあ、実際書くことはできる。しかし、たとえば、フライトモードの変更は、MAVSDKではできないと思う。散々調べてもできそうになかった。
フライトモードの変更は、PixHawkを使う上ではとても大事だ。もちろん、プロポやQGroundContoroller(以下QGCと略す)を使えば、簡単にできるのだが、それでは納得いかないのだ。QGCを使うためには、その間、PixHawkとUSB接続しておかなければならない(Wi-fiでもできるものもあるのだろうが)。プロポを使わなくてもいいシステムを考えているので、これもだめだ。そうなると、いまのフライトモードがなんであり、別のフライトモードにセットするのはどうしてやりのだということになる。QGCができるということは、どこかにそのコマンドがあるはずなのだ。QGCのソースを調べればその辺りはわかるのだと思うがそれはやっていない。
それで、今日調べたら、また、MavLinkでそれができるのだ。というか、MavLinkでは、PixHawkにMAVSDK以上に、詳細なコマンドを送ることができるのだ。それは、
https://mavlink.io/en/mavgen_c/example_c_uart.html
ここにあるサンプルを見てわかった。これは、実際に、PixHawkにUSBのシリアルポートを通してつながっているRaspberryPIでコンパイルできて、PixHawkにコマンドを送ることができたのだ。
Mavlinkライブラリというのは、ヘッダーファイルしかないという一見変なものなのだが、それは、整数値を持つコマンドが定義されていて、それを使ってすぐにコマンドをシリアルポート経由で送ることができるということなのだ。
それがわかって、なるほどと思った。MAVSDKを使うのはやめて、MavLinkでシステムを作ろうということになったわけだ。