AR.Drone2.0でUSB動画保存

AR.Drone 2.0は動画をUSBメモリに保存することができます。

送るコマンドは以下の通りです。
1. AT*CONFIGでvideo:video_on_usbをTRUEに設定
2. AT*CONFIGでvideo:video_codecを0x82に設定

USBには720pのHD動画が保存されます。
PC側にはMPEG4で解像度が640x328の動画が送られてきます。

また、録画を止めるときはこのようにします。
1. AT*CONFIGでvideo:video_on_usbをFALSEに設定
2. AT*CONFIGでvideo:video_codecを0x81に設定

動画形式を切り替えた場合、デコーダの再初期化が必要になります。
ARDrone::setVideoRecord()を呼ぶと一瞬止まるのはそのためです。
※2013/08/18 バグ報告: setVideoRecord()はgetImage()を呼ぶ前に実行してください。

ちなみにvideo:video_codecを0x88に設定すると360pで保存されるそうです。ふーん。

CvVideoWriterでフレームレートが安定しないときは有効ですね。

AR.Drone1.0ユーザの皆さんは...その、なんというか...頑張ってください。
関連記事

コメントの投稿

非公開コメント

No title

お忙しいところ恐れ入りますがCVDroneについて不明な点があったので質問させていただきます。
今ドローンの画像をUSBに保存しようとしていて、記事を読ませていただいたのですがAT*CONFIGというものがいまいちわかりません。
どのように使うものなのか教えてください。

Re: No title

AT*CONFIGはAR.Droneの設定情報を変更するためのコマンドです。
sockCommand.sendf("AT*CONFIG=%d,\"video:video_on_usb\",\"TRUE\"\r", ++seq);

AT*CONFIGの第1引数(%dになっている部分)はシーケンス番号です。
コマンドを送るたびに1増える変数をしてすればOKです。

第2引数(video:video_on_usbなど)は設定名です。
↓8.3 Multiconfigurationの項で詳しく解説されています
http://www.msh-tools.com/ardrone/ARDrone_Developer_Guide.pdf

第3引数は設定する数値です。真偽値、整数、実数であったりします。

実際にどのように使うかについては、CV Droneのソースが参考になると思います。
https://github.com/puku0x/cvdrone/blob/master/src/ardrone/command.cpp#L417-L443

No title

素早い回答ありがとうございます。おかげさまで録画することまではできるようになりました。しかし、USBに保存する部分がうまくいきません。
ardrone.setVideoRecord(false);をつけてみたりこのブログで画像保存として紹介されていたcvdrone/samples/sample_video_record.cpp を使用したりもしたのですが、USBに保存されないのです。何か心当たりがあれば教えていただきたいです。

Re: No title

> USBに保存されない
私も最初は動画が保存されない問題に悩まされた経験があります。以下を確認してみてください。
・USBの空きは十分ですか?
・AR.Droneのファームは2.4.8以上ですか?
・公式アプリ(FreeFlight)で録画はできますか?
・sample_video_record.cppを実行後、「rを押す(録画開始)」
 →「rを押す(録画停止)」→「Esc」と操作すると保存されますか?

No title

指摘された
・空き容量
・CVDRoneのバージョン
・公式アプリ(FreeFlight)で録画
・sample_video_record.cppを実行後、「rを押す(録画開始)」
 →「rを押す(録画停止)」→「Esc」
をそれぞれ確認しました。
・空き容量:現在のUSBは3.7GBの空きがありましたが、USBの不具合を考慮して容量4GBの新しいUSBを用意しました。
・バージョンは2.48でした。
・公式アプリでの録画には成功しMP4ファイルでの保存およびパソコンでの鑑賞が可能でした。
しかしsample_video_record.cppを実行後、「rを押す(録画開始)」
 →「rを押す(録画停止)」→「Esc」を試してみたのですがESCキーの段階で停止してしまいます。
rを押すと赤字の・RECが出ることともう一度rを押すと消えることは確認できたのですがESCキーを押しても保存されているようには見えませんでした。

Re: No title

詳細ありがとうございます。
こちらで症状が再現できるか試してみます。
ただ、現在手元にAR.Droneが無いのと、優先する仕事が1件入っているため回答は週末になりそうです。

No title

こちらこそ素早く丁寧な回答ありがとうございました。もう少し自分でも考えてみます。

No title

以前のコメントの後再度ARDroneへの録画を試みていたのですが、sampleでESCを押すとフリーズする件については解消されました。
しかしプログラムを実行し、rを押して録画を行いESCキーを押すという一連の流れを行っても動画は保存されていませんでした。以前のコメントでardrone.set video record (TRUE)のように変更すれば保存できるというような内容のコメントがあり試してみましたがうまくいきませんでした。
やはりUSBそのものに原因があるのではないかと考えていますが、それ以外に何か保存できない原因に心当たりはございませんでしょうか?

Re: No title

報告が遅れて申し訳ありません。

社内にあったドローンが見当たらず、現在、問題の再現ができない状態です。

原因についてなのですが、今のところ2つほど考えております。
・送信コマンドが間違っている
・AT*CONFIGのインターバルが短すぎる

動作確認済みのサンプルのみ公開しているため、送信コマンドに間違いがあるとは考えにくいのですが、一応確認の程お願いします。

AT*CONFIGを複数送るときのインターバルというのは、command.cppの430行目と438行目にあるmsleep()のことです。
https://github.com/puku0x/cvdrone/blob/master/src/ardrone/command.cpp#L417-L443
msleep(500)など、インターバルの数値を上げてみるとどうでしょうか?


No title

お手数おかけしています。
送信コマンドについてですが正直よくわからないです。
送信間隔は500 1000 1500 2000 で試しましたがやはり録画することができなかったです。
そのことなのですがよくある質問の中でUSBに録画できない場合に
終了時にARDrone::setVideoRecord(false)を呼んでください。
という文章がありこれが録画できない原因ではないかと考えていますが、sample programで録画できるということなので関係ないのかもしれませんが、ご意見をお聞かせ願いますか。

No title

大変お手数おかけしております。やはり動画保存はうまくいかないのですが、代わりに写真を撮ることでもなんとかなりそうなのですがそういったことはできますでしょうか?

Re: No title

返信遅れてすみません。

カメラからの画像を保存するには、getImage()でカメラ画像を取得後、cv::imwriteでファイル書き出しを実行すれば良いと思います。

No title

こちらこそご迷惑をおかけしてすいません。
写真を撮るプログラムのことなのですが、
cv::imwrite();
の()の中はファイルを指定すると思うのですが、その際特定のファイルを指定する方法がわかりません。
すいませんが教えていただけると助かります。

No title

お世話になっております。プログラムを作成したのですがUnspecified error がcv::imwriteに出ているのですがこれがよくわかりません。以下のようなプログラムなのですがどこがいけないのか教えていただけるとありがたいです。
#include "ardrone/ardrone.h"
#include <stdio.h>



int main(int argc, char** argv){
ARDrone ardrone;
if (!ardrone.open()) {
std::cout << "Failed to initialize." << std::endl;
return -1;
}
printf("Battery = %d%%\n", ardrone.getBatteryPercentage());

char filename[] = "FLIGHT"; /* データファイル名 */
FILE *fp;
fp = fopen(filename, "w");

std::vector<int> params(2);
// jpg
params[0] = CV_IMWRITE_JPEG_QUALITY;
params[1] = 10;


int key;//キー入力用の変数

while (1) {
// キー入力
int key = cv::waitKey(1);
if (key == 0x1b) break;

// 動画の録画/停止
if (key == 'r') {
/* ファイルを開く */
cv::Mat image = ardrone.getImage();
cv::imwrite(filename, image, params);

}
// 画像を取得
cv::Mat image = ardrone.getImage();
cv::imshow("camera", image);
}
fclose(fp);
// さようなら
ardrone.close();

return 0;
}
プロフィール

puku

Author:puku
暇な時はゲームかプログラミングしてる人だよ。
だいたい月1更新。
CV Drone はこちら(GitHub)

最近はQiitaでOnsenUI2で遊んでいる。

最新記事
最新コメント
最新トラックバック
検索フォーム
カレンダー
04 | 2023/05 | 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -
月別アーカイブ
カテゴリ
スポンサードリンク
RSSリンクの表示
FC2カウンター
リンク
ブロとも申請フォーム

この人とブロともになる

アクセスランキング
[ジャンルランキング]
コンピュータ
822位
アクセスランキングを見る>>

[サブジャンルランキング]
プログラミング
152位
アクセスランキングを見る>>
FC2ブログランキング

FC2Blog Ranking

QRコード
QR