MAVlinkについてやってみたこと
ドローンの状態を読み取って外部から制御をかけようとおもって、MAVlinkについて調べて、試してみたこと。まず、MAVlinkとは・・・以下のページ参照。http://wpedia.goo.ne.jp/enwiki/MAVLink次にUSBシリアル変換器を使って、APM2.5のterm端子から、MAVlinkの信号を確認、バイナリデータが流れてくるので、保存して、頭のFEで区切って見ると、規則正しく信号が読み取れてることが確認できた。次に、MAVlinkを読み取るArduinoのサンプルを探して動かしてみたが、まったく反応無し。立ち戻って、Arduinoで直接バイナリデータを読み込み、出力するプログラムを書いて、動作を確認。Byteの変数に、Serial.readして、Serial.writeしてバイナリデータを読み込めるシリアルターミナルを動かしてみるが、まともに読み取れず、オシロで波形を見たりしていろいろ調べるが分からない。更に立ち戻ってUSBシリアル変換と、Arduino UNOの違いはどこか? と考えてもしやと思って、Deumilanoveに交換したら上手く行った。単にUNOのシリアル変換部分の動作不具合だったが、こんなことじゃ困ります。次に、MAVlinkのメッセージの内容については調べ、以下のURLを見つけた。APM-MAVLinkデータの内容についてhttp://diydrones.com/group/japan-arducopter-group/forum/topics/apm-mavlinkその回答のURLhttps://pixhawk.ethz.ch/mavlink/ここから、メッセージのフォーマットがわかったので読み取ってみたら、ATTITUDE ( #30 )time_boot_ms uint32_t Timestamp (milliseconds since system boot) roll float Roll angle (rad, -pi..+pi) pitch float Pitch angle (rad, -pi..+pi) yaw float Yaw angle (rad, -pi..+pi) rollspeed float Roll angular speed (rad/s) pitchspeed float Pitch angular speed (rad/s) yawspeed float Yaw angular speed (rad/s) とのことなので、メッセージのバイト数を数えてみると、Flaotが2バイトで表現されていることになる。バイナリで送られた2バイトのフロートを4バイトのフロートに変換しないと使えない。4バイトの浮動小数点数は IEEE 754https://ja.wikipedia.org/wiki/%E5%8D%98%E7%B2%BE%E5%BA%A6%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0頑張って作るか、どこかで探すか・・・・というところまでが、昨日やったこと。(一番時間を食ったのはUNO->Deumilanove、だからUNO嫌い)ー追記ー調べたら、半精度浮動小数点数というのがあった、知らなかった。同じく、IEEE 754-2008 でbinary16と名づけられているそうだ。https://ja.wikipedia.org/wiki/%E5%8D%8A%E7%B2%BE%E5%BA%A6%E6%B5%AE%E5%8B%95%E5%B0%8F%E6%95%B0%E7%82%B9%E6%95%B0