ドローンの状態を読み取って外部から制御をかけようとおもって、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
その回答のURL
https://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 754
https://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
お気に入りの記事を「いいね!」で応援しよう
Last updated
2016.02.03 10:14:19
コメント(0)
|
コメントを書く