#include "ardrone/ardrone.h"
#ifdef _WIN32
#include <windows.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#ifndef __APPLE__
#include <GL/gl.h>
#include <GL/glut.h>
#else
#include <OpenGL/gl.h>
#include <GLUT/glut.h>
#endif
#include <AR/gsub.h>
#include <AR/video.h>
#include <AR/param.h>
#include <AR/ar.h>
/*
#include <AR/config.h>
#include <AR/video.h>
#include <AR/param.h> // arParamDisp()
#include <AR/ar.h>
#include <AR/gsub_lite.h>*/
#define KEY_DOWN(key) (GetAsyncKeyState(key) & 0x8000)
#define KEY_PUSH(key) (GetAsyncKeyState(key) & 0x0001)
// --------------------------------------------------------------------------
// main(引数の数、引数リスト)
// メイン関数です
// 戻り値 正常終了:0 エラー:-1
// --------------------------------------------------------------------------
/* パターンファイル */
char *patt_name = "Data/patt.hiro"; // パターンファイル
int patt_id; // パターンのID
double patt_trans[3][4]; // 座標変換行列
double patt_center[2] = { 0.0, 0.0 }; // パターンの中心座標
double patt_width = 80.0; // パターンのサイズ(単位:mm)
int main(int argc, char **argv)
{
// カメラからのビデオキャプチャを初期化する
CvCapture *videoCapture = cvCreateCameraCapture( 1 );
if( videoCapture == NULL )
{
return -1;
}
// AR.Drone
ARDrone ardrone;
// 初期化
if (!ardrone.open()) {
printf("ARDroneの初期化に失敗しました\n");
return -1;
}
// メインループ
while (!GetAsyncKeyState(VK_ESCAPE)) {
// AR.Droneの更新
if (!ardrone.update()) break;
// 画像の取得
IplImage *image = ardrone.getImage();
//OpenCV→ARToolkit
// argDrawMode2D();
// argDispImage( dataPtr, 0,0 );
// ナビゲーションデータの取得
double roll = ardrone.getRoll();
double pitch = ardrone.getPitch();
double yaw = ardrone.getYaw();
printf("ardrone.roll = %3.2f [deg]\n", roll * RAD_TO_DEG);
printf("ardrone.pitch = %3.2f [deg]\n", pitch * RAD_TO_DEG);
printf("ardrone.yaw = %3.2f [deg]\n", yaw * RAD_TO_DEG);
// 高度
double altitude = ardrone.getAltitude();
printf("ardrone.altitude = %3.2f [m]\n", altitude);
// 速度
double vx, vy, vz;
double velocity = ardrone.getVelocity(&vx, &vy, &vz);
printf("ardrone.vx = %3.2f [m/s]\n", vx);
printf("ardrone.vy = %3.2f [m/s]\n", vy);
printf("ardrone.vz = %3.2f [m/s]\n", vz);
// バッテリ残量
int battery = ardrone.getBatteryPercentage();
printf("ardrone.battery = %d [%] (残り約%d分)\n", battery, 12*battery/100);
// 離陸・着陸
if (KEY_PUSH(VK_SPACE)) {
if (ardrone.onGround()) ardrone.takeoff();
else ardrone.landing();
}
// ARDroneが飛行状態
if (!ardrone.onGround()) {
// 速度指令
double x = 0.0, y = 0.0, z = 0.0, r = 0.0;
if (KEY_DOWN(VK_UP)) x = 0.5;
if (KEY_DOWN(VK_DOWN)) x = -0.5;
if (KEY_DOWN(VK_LEFT)) r = 0.5;
if (KEY_DOWN(VK_RIGHT)) r = -0.5;
if (KEY_DOWN('Q')) z = 0.5;
if (KEY_DOWN('A')) z = -0.5;
ardrone.move3D(x, y, z, r);
}
// カメラ切り替え
static int mode = 0;
if (KEY_PUSH('C')) ardrone.setCamera(++mode%4);
// 表示
cvShowImage("camera", image);
// ARMarker処理
arToolKit(image);
cvWaitKey(1);
}
// さようなら
ardrone.close();
// ビデオキャプチャを解放する
cvReleaseCapture( &videoCapture );
return 0;
}
/*
* ARToolKit用関数
* メインループから呼び出される
* 参考:http://www.cg-ya.net/imedia/ar/artoolkit_base_program/
*/
void arToolKit( IplImage* cvImage ) {
ARUint8* arImage = (ARUint8*)(cvimage->imageData);
ARMarkerInfo* marker_info;
int marker_num;
// マーカが画像内にあるか
if( arDetectMarker( arImage, thresh, &marker_info, &marker_num ) < 0 ) {
return;
}
// 登録したマーカの一致度比較
int k = - 1;
for( int j = 0; j < marker_num; j++ ){
for( patt_id == marker_info[j].id ) {
if( k == -1 ) k = j;
else if( marker_info[k].cf < marker_info[j].cf )
k = j;
}
}
// 登録したマーカが存在しない場合
if( k == -1 ) {
return;
}
}
// マーカの位置・姿勢
// arGetTransMat( &marker_info[k], patt_center, patt_width, patt_trans );
// マーカの情報表示
printf( "信頼度:%f\n", marker_info.cf);
printf( "マーカの中心座標 x:%5f y:%5f\nn" marker_info.pos[0], marker_info.pos[1] );
}
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
: error C2065: 'thresh' : 定義されていない識別子です。
1: warning C4553: '==' : 演算子にプログラム上の作用がありません。'=' を意図しましたか?
1 : error C2143: 構文エラー : ';' が ')' の前にありません。
: error C2143: 構文エラー : ';' が ')' の前にありません。
: error C2065: 'marker_info' : 定義されていない識別子です。
: error C2228: '.cf' の左側はクラス、構造体、共用体でなければなりません
1> 型は ''unknown-type'' です。
1 : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1 : error C2365: 'printf' : 再定義; 以前の定義は '関数' でした。
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h(287) : 'printf' の宣言を確認してください。
1 : error C2078: 初期化子の数が多すぎます。
1 : error C2146: 構文エラー : ')' が、識別子 'marker_info' の前に必要です。
1 : error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません
1 : error C2365: 'printf' : 再定義; 以前の定義は '関数' でした。
1> c:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\include\stdio.h(287) : 'printf' の宣言を確認してください。
1> : error C2440: '初期化中' : 'const char [33]' から 'int' に変換できません。
1> この変換が可能なコンテキストはありません。
1 : error C2059: 構文エラー : ')'
1: error C2059: 構文エラー : '}'
1 : error C2143: 構文エラー : ';' が '}' の前にありません。
1 : error C2059: 構文エラー : '}'
エラーの解決方法を教えていただきたいです。
cv drone と ar toolkit についてのしつもんです
Re: cv drone と ar toolkit についてのしつもんです
まず左上のフォーラムルールに目を通しましょう
http://dixq.net/board/board.html
プログラムを見た限りコーティングが滅茶苦茶です。
ブロック構造が崩壊しているような気がします。
これはあなたが組んだプログラムですか?
そうでなければこれはどこか別のサイトから引用したプログラムでしょうか?
そうであれば引用元をご提示願えると助かります。
あなたのスキルと提示して頂いたコードの内容が明らかに釣り合って無いので、こんな質問をさせていただきました。
(フォーラムルールにも投稿者のプログラムスキルの記載を求める内容があります。それによって説明の仕方が変わってきますので。)
あなたの質問を見る限りプログラムを触ったことが無いような気がします。
hello worldを表示するだけの簡単なコンソールプログラムを組めますか?
いきなりこんな難しいものではなく、コンソールで簡単なプログラムの組み方を学んだ後にもう一度この問題に手をつけた方がよろしいかと思われます。
エラーの内容はどれも初歩的な内容です
error C2065: 'thresh' : 定義されていない識別子です。
は thresh と言う変数が宣言されていないのに使われていると言っています。
要するに存在しない物を使おうとしているという事です。
それ以外はほとんどブロックが崩壊している時に出るような内容です。
ご提示頂いたエラーの内容はどれもエラーコードの (C2065といった[C]と[数値]で記述してある部分)をMSDN等のネットで調べれば最低限プログラムが組めるのであればこれらの問題の内容はすぐに分かります。
インデントの修正をしましたが後半に不自然にハブれたコードが出ました。
(//-----------------------------------------------------------で区切った場所以下のコード。"}"がどこのブロックの括弧なのか不明で修正で来ません。)
http://dixq.net/board/board.html
プログラムを見た限りコーティングが滅茶苦茶です。
ブロック構造が崩壊しているような気がします。
これはあなたが組んだプログラムですか?
そうでなければこれはどこか別のサイトから引用したプログラムでしょうか?
そうであれば引用元をご提示願えると助かります。
あなたのスキルと提示して頂いたコードの内容が明らかに釣り合って無いので、こんな質問をさせていただきました。
(フォーラムルールにも投稿者のプログラムスキルの記載を求める内容があります。それによって説明の仕方が変わってきますので。)
あなたの質問を見る限りプログラムを触ったことが無いような気がします。
hello worldを表示するだけの簡単なコンソールプログラムを組めますか?
いきなりこんな難しいものではなく、コンソールで簡単なプログラムの組み方を学んだ後にもう一度この問題に手をつけた方がよろしいかと思われます。
エラーの内容はどれも初歩的な内容です
error C2065: 'thresh' : 定義されていない識別子です。
は thresh と言う変数が宣言されていないのに使われていると言っています。
要するに存在しない物を使おうとしているという事です。
それ以外はほとんどブロックが崩壊している時に出るような内容です。
ご提示頂いたエラーの内容はどれもエラーコードの (C2065といった[C]と[数値]で記述してある部分)をMSDN等のネットで調べれば最低限プログラムが組めるのであればこれらの問題の内容はすぐに分かります。
インデントの修正をしましたが後半に不自然にハブれたコードが出ました。
(//-----------------------------------------------------------で区切った場所以下のコード。"}"がどこのブロックの括弧なのか不明で修正で来ません。)
#include "ardrone/ardrone.h"
#ifdef _WIN32
#include <windows.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#ifndef __APPLE__
#include <GL/gl.h>
#include <GL/glut.h>
#else
#include <OpenGL/gl.h>
#include <GLUT/glut.h>
#endif
#include <AR/gsub.h>
#include <AR/video.h>
#include <AR/param.h>
#include <AR/ar.h>
/*
#include <AR/config.h>
#include <AR/video.h>
#include <AR/param.h> // arParamDisp()
#include <AR/ar.h>
#include <AR/gsub_lite.h>*/
#define KEY_DOWN(key) (GetAsyncKeyState(key) & 0x8000)
#define KEY_PUSH(key) (GetAsyncKeyState(key) & 0x0001)
// --------------------------------------------------------------------------
// main(引数の数、引数リスト)
// メイン関数です
// 戻り値 正常終了:0 エラー:-1
// --------------------------------------------------------------------------
/* パターンファイル */
char *patt_name = "Data/patt.hiro"; // パターンファイル
int patt_id; // パターンのID
double patt_trans[3][4]; // 座標変換行列
double patt_center[2] = { 0.0, 0.0 }; // パターンの中心座標
double patt_width = 80.0; // パターンのサイズ(単位:mm)
int main(int argc, char **argv){
// カメラからのビデオキャプチャを初期化する
CvCapture *videoCapture = cvCreateCameraCapture( 1 );
if( videoCapture == NULL ){
return -1;
}
// AR.Drone
ARDrone ardrone;
// 初期化
if (!ardrone.open()) {
printf("ARDroneの初期化に失敗しました\n");
return -1;
}
// メインループ
while (!GetAsyncKeyState(VK_ESCAPE)) {
// AR.Droneの更新
if (!ardrone.update()) break;
// 画像の取得
IplImage *image = ardrone.getImage();
//OpenCV→ARToolkit
// argDrawMode2D();
// argDispImage( dataPtr, 0,0 );
// ナビゲーションデータの取得
double roll = ardrone.getRoll();
double pitch = ardrone.getPitch();
double yaw = ardrone.getYaw();
printf("ardrone.roll = %3.2f [deg]\n", roll * RAD_TO_DEG);
printf("ardrone.pitch = %3.2f [deg]\n", pitch * RAD_TO_DEG);
printf("ardrone.yaw = %3.2f [deg]\n", yaw * RAD_TO_DEG);
// 高度
double altitude = ardrone.getAltitude();
printf("ardrone.altitude = %3.2f [m]\n", altitude);
// 速度
double vx, vy, vz;
double velocity = ardrone.getVelocity(&vx, &vy, &vz);
printf("ardrone.vx = %3.2f [m/s]\n", vx);
printf("ardrone.vy = %3.2f [m/s]\n", vy);
printf("ardrone.vz = %3.2f [m/s]\n", vz);
// バッテリ残量
int battery = ardrone.getBatteryPercentage();
printf("ardrone.battery = %d [%] (残り約%d分)\n", battery, 12*battery/100);
// 離陸・着陸
if (KEY_PUSH(VK_SPACE)) {
if (ardrone.onGround()) ardrone.takeoff();
else ardrone.landing();
}
// ARDroneが飛行状態
if (!ardrone.onGround()) {
// 速度指令
double x = 0.0, y = 0.0, z = 0.0, r = 0.0;
if (KEY_DOWN(VK_UP)) x = 0.5;
if (KEY_DOWN(VK_DOWN)) x = -0.5;
if (KEY_DOWN(VK_LEFT)) r = 0.5;
if (KEY_DOWN(VK_RIGHT)) r = -0.5;
if (KEY_DOWN('Q')) z = 0.5;
if (KEY_DOWN('A')) z = -0.5;
ardrone.move3D(x, y, z, r);
}
// カメラ切り替え
static int mode = 0;
if (KEY_PUSH('C')) ardrone.setCamera(++mode%4);
// 表示
cvShowImage("camera", image);
// ARMarker処理
arToolKit(image);
cvWaitKey(1);
}
// さようなら
ardrone.close();
// ビデオキャプチャを解放する
cvReleaseCapture( &videoCapture );
return 0;
}
/*
* ARToolKit用関数
* メインループから呼び出される
* 参考:http://www.cg-ya.net/imedia/ar/artoolkit_base_program/
*/
void arToolKit( IplImage* cvImage ) {
ARUint8* arImage = (ARUint8*)(cvimage->imageData);
ARMarkerInfo* marker_info;
int marker_num;
// マーカが画像内にあるか
if( arDetectMarker( arImage, thresh, &marker_info, &marker_num ) < 0 ) {
return;
}
// 登録したマーカの一致度比較
int k = - 1;
for( int j = 0; j < marker_num; j++ ){
for( patt_id == marker_info[j].id ) {
if( k == -1 ) k = j;
else if( marker_info[k].cf < marker_info[j].cf )k = j;
}
}
// 登録したマーカが存在しない場合
if( k == -1 ) {
return;
}
}
// マーカの位置・姿勢
// arGetTransMat( &marker_info[k], patt_center, patt_width, patt_trans );
//謎(これは本来どこにあるべきコードなのか?)ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
// マーカの情報表示
printf( "信頼度:%f\n", marker_info.cf);
printf( "マーカの中心座標 x:%5f y:%5f\nn" marker_info.pos[0], marker_info.pos[1] );
}
Re: cv drone と ar toolkit についてのしつもんです
ご返答ありがとうございす。
フォーラムの方読ませて頂きました。
実は、情報系の大学に出てる者ですが授業についていけず基礎を勉強している段階です。
なのでC言語に関しましては、基礎レベルと言わざる終えません、ですが卒論でこのプログラム
を扱っていて、卒論提出まで時間がない為、基礎レベルしか有していない私は、先人に知恵を乞おうとした次第であります。
ちなみに先ほどのプログラムは、「 open cvを使ってar droneを動かし、AR tool kit のパスを通して
ar droneに搭載されているカメラでマーカーを認識する。」というプログラムです。
アドバイスを頂きたい内容ですが、「AR droneでマーカーを認識できる」ようにコーティングしたいと思っていて、どの辺にどんな関数や変数を入れたら良いでしょうか?
フォーラムの方読ませて頂きました。
実は、情報系の大学に出てる者ですが授業についていけず基礎を勉強している段階です。
なのでC言語に関しましては、基礎レベルと言わざる終えません、ですが卒論でこのプログラム
を扱っていて、卒論提出まで時間がない為、基礎レベルしか有していない私は、先人に知恵を乞おうとした次第であります。
ちなみに先ほどのプログラムは、「 open cvを使ってar droneを動かし、AR tool kit のパスを通して
ar droneに搭載されているカメラでマーカーを認識する。」というプログラムです。
アドバイスを頂きたい内容ですが、「AR droneでマーカーを認識できる」ようにコーティングしたいと思っていて、どの辺にどんな関数や変数を入れたら良いでしょうか?
Re: cv drone と ar toolkit についてのしつもんです
私はOpenCVを触ったことが無いので一概に答えを言えませんが、少なくともあなたの目的から言えることは一つ。
『何か機能を追加する前にまず動くものを作る』
これが一番大事です。何事も。
動作チェックもせず、動きもしないものに機能を追加しようとしても動くわけがないことは『明白』ですから。
動きもしない物にコードを追加しても可読性が下がって余計に混乱するだけです。
まずは先ほど答えた内容から修正し『動く物』にするのが最優先です。
それにこのソースコード明らかにコードが足りなさすぎです。いろいろと情報(定義等)が欠落しています。おそらくいろいろなところからソースを引っ張ってきて強引に繋げていませんか?
期限がらみで行き詰まるとそういう行動はよく起きます。
まずはコードを削れるだけ削ってコンパイルが通るようにして、そこから削ったものを少しづつ足していくのが近道ではないのでしょうか?
そして目的の部分まで到達したらそこで起きた問題(実行中に思っていた動作にならない)を質問した方が早い気がします。
今のままではたとえ機能を追加し奇跡的に動いたとしても重大なバグを孕んでスパゲッティ化し
http://ja.wikipedia.org/wiki/%E3%82%B9% ... 9%E3%83%A0
どつぼにハマって結局どうにもならなくなる可能性が高いです。
過去の経験ですがこういう期限がヤバいのに知識が無いと言うときは無理やりにでも組まず(そんなことしたら余計にそして確実に破綻する)、短い期間、少ない量でいいのでまず自分がやろうとしている部分だけを理解しながら(参考書片手など)やるのがいいと思います。(可能性は高くないが少なくとも理解せずに突き進み行き詰まって破綻するよりはよっぽどマシ)
全く理解していないと僅かにでも理解している。これのもたらす差は非常に大きいです。
期限が絡むと前が見えなくなりがちですが一旦落ち着いて深呼吸しましょう。慌てても何もメリットは生まれません。
とりあえず元のコードを自分でできる限り直して見ました。
ただし私のPCにはCを組む環境も無ければAR用の機材も当然ありませんのでコンパイルチェックなんてしていません。動くか分かりませんがとりあえず試してみてください。
あと、このサイトのコードを引用していましたね?
http://www.cg-ya.net/imedia/ar/artoolkit_base_program/
あなたの提示されたプログラムにはグローバル宣言がありませんでしたよ。
(threshの部分です)
引用するなら引用するで中途半端に引用せず、まずは丸写しで動くかちゃんと確認してください。
後は僕よりもOpenCVに詳しく開発経験の豊富な方に任せたいと思います。
『何か機能を追加する前にまず動くものを作る』
これが一番大事です。何事も。
動作チェックもせず、動きもしないものに機能を追加しようとしても動くわけがないことは『明白』ですから。
動きもしない物にコードを追加しても可読性が下がって余計に混乱するだけです。
まずは先ほど答えた内容から修正し『動く物』にするのが最優先です。
それにこのソースコード明らかにコードが足りなさすぎです。いろいろと情報(定義等)が欠落しています。おそらくいろいろなところからソースを引っ張ってきて強引に繋げていませんか?
期限がらみで行き詰まるとそういう行動はよく起きます。
まずはコードを削れるだけ削ってコンパイルが通るようにして、そこから削ったものを少しづつ足していくのが近道ではないのでしょうか?
そして目的の部分まで到達したらそこで起きた問題(実行中に思っていた動作にならない)を質問した方が早い気がします。
今のままではたとえ機能を追加し奇跡的に動いたとしても重大なバグを孕んでスパゲッティ化し
http://ja.wikipedia.org/wiki/%E3%82%B9% ... 9%E3%83%A0
どつぼにハマって結局どうにもならなくなる可能性が高いです。
過去の経験ですがこういう期限がヤバいのに知識が無いと言うときは無理やりにでも組まず(そんなことしたら余計にそして確実に破綻する)、短い期間、少ない量でいいのでまず自分がやろうとしている部分だけを理解しながら(参考書片手など)やるのがいいと思います。(可能性は高くないが少なくとも理解せずに突き進み行き詰まって破綻するよりはよっぽどマシ)
全く理解していないと僅かにでも理解している。これのもたらす差は非常に大きいです。
期限が絡むと前が見えなくなりがちですが一旦落ち着いて深呼吸しましょう。慌てても何もメリットは生まれません。
とりあえず元のコードを自分でできる限り直して見ました。
ただし私のPCにはCを組む環境も無ければAR用の機材も当然ありませんのでコンパイルチェックなんてしていません。動くか分かりませんがとりあえず試してみてください。
#include "ardrone/ardrone.h"
#ifdef _WIN32 //_WIN32が定義されていたらこちらをインクルード
#include <windows.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#ifndef __APPLE__ //__APPLE__が定義されていたらこちらをインクルード
#include <GL/gl.h>
#include <GL/glut.h>
#else //そうじゃなければこちらをインクルード
#include <OpenGL/gl.h>
#include <GLUT/glut.h>
#endif
#include <AR/gsub.h>
#include <AR/video.h>
#include <AR/param.h>
#include <AR/ar.h>
//定数(マクロ)宣言
#define KEY_DOWN(key) (GetAsyncKeyState(key) & 0x8000)
#define KEY_PUSH(key) (GetAsyncKeyState(key) & 0x0001)
// グローバル変数
/* カメラ構成 */
char *vconf_name = "Data/WDM_camera_flipV.xml"; // ビデオデバイスの設定ファイル
int xsize; // ウィンドウサイズ
int ysize; // ウィンドウサイズ
int thresh = 100; // 2値化の閾値
int count = 0; // 処理フレーム数
/* カメラパラメータ */
char *cparam_name = "Data/camera_para.dat"; // カメラパラメータファイル
ARParam cparam;
/* パターンファイル */
char *patt_name = "Data/patt.hiro"; // パターンファイル
int patt_id; // パターンのID
double patt_trans[3][4]; // 座標変換行列
double patt_center[2] = { 0.0, 0.0 }; // パターンの中心座標
double patt_width = 80.0; // パターンのサイズ(単位:mm)
// --------------------------------------------------------------------------
// main(引数の数、引数リスト)
// メイン関数です
// 戻り値 正常終了:0 エラー:-1
// --------------------------------------------------------------------------
//メイン関数
int main(int argc, char **argv){
// カメラからのビデオキャプチャを初期化する
CvCapture *videoCapture = cvCreateCameraCapture( 1 );
if( videoCapture == NULL ){
return -1;
}
// AR.Drone
ARDrone ardrone;
// 初期化
if (!ardrone.open()) {
printf("ARDroneの初期化に失敗しました\n");
return -1;
}
// メインループ
while (!GetAsyncKeyState(VK_ESCAPE)) {
// AR.Droneの更新
if (!ardrone.update()) break;
// 画像の取得
IplImage *image = ardrone.getImage();
//OpenCV→ARToolkit
// ナビゲーションデータの取得
double roll = ardrone.getRoll();
double pitch = ardrone.getPitch();
double yaw = ardrone.getYaw();
printf("ardrone.roll = %3.2f [deg]\n", roll * RAD_TO_DEG);
printf("ardrone.pitch = %3.2f [deg]\n", pitch * RAD_TO_DEG);
printf("ardrone.yaw = %3.2f [deg]\n", yaw * RAD_TO_DEG);
// 高度
double altitude = ardrone.getAltitude();
printf("ardrone.altitude = %3.2f [m]\n", altitude);
// 速度
double vx, vy, vz;
double velocity = ardrone.getVelocity(&vx, &vy, &vz);
printf("ardrone.vx = %3.2f [m/s]\n", vx);
printf("ardrone.vy = %3.2f [m/s]\n", vy);
printf("ardrone.vz = %3.2f [m/s]\n", vz);
// バッテリ残量
int battery = ardrone.getBatteryPercentage();
printf("ardrone.battery = %d [%] (残り約%d分)\n", battery, 12*battery/100);
// 離陸・着陸
if (KEY_PUSH(VK_SPACE)) { //キーが押されたとき(恐らくスペースキー)
if (ardrone.onGround()){
ardrone.takeoff();
}else{
ardrone.landing();
}
}
// ARDroneが飛行状態
if (!ardrone.onGround()) {
// 速度指令
double x = 0.0, y = 0.0, z = 0.0, r = 0.0;
if (KEY_DOWN(VK_UP)) x = 0.5;
if (KEY_DOWN(VK_DOWN)) x = -0.5;
if (KEY_DOWN(VK_LEFT)) r = 0.5;
if (KEY_DOWN(VK_RIGHT)) r = -0.5;
if (KEY_DOWN('Q')) z = 0.5;
if (KEY_DOWN('A')) z = -0.5;
ardrone.move3D(x, y, z, r);
}
// カメラ切り替え
static int mode = 0;
if (KEY_PUSH('C')){
ardrone.setCamera(++mode%4);
}
// 表示
cvShowImage("camera", image);
// ARMarker処理
arToolKit(image);
cvWaitKey(1);
}
// さようなら
ardrone.close();
// ビデオキャプチャを解放する
cvReleaseCapture( &videoCapture );
return 0;
}
/*
* ARToolKit用関数
* メインループから呼び出される
* 参考:http://www.cg-ya.net/imedia/ar/artoolkit_base_program/
*/
void arToolKit( IplImage* cvImage ) {
ARUint8* arImage = (ARUint8*)(cvimage->imageData);
ARMarkerInfo* marker_info;
int marker_num;
// マーカが画像内にあるか
if( arDetectMarker( arImage, thresh, &marker_info, &marker_num ) < 0 ) {
return;
}
// 登録したマーカの一致度比較
int k = - 1;
for( int j = 0; j < marker_num; j++ ){
for( patt_id == marker_info[j].id ) {
if( k == -1 ) k = j;
else if( marker_info[k].cf < marker_info[j].cf )k = j;
}
}
// 登録したマーカが存在しない場合
if( k == -1 ) {
return;
}
// マーカの情報表示
printf( "信頼度:%f\n", marker_info.cf);
printf( "マーカの中心座標 x:%5f y:%5f\nn" marker_info.pos[0], marker_info.pos[1] );
}
http://www.cg-ya.net/imedia/ar/artoolkit_base_program/
あなたの提示されたプログラムにはグローバル宣言がありませんでしたよ。
(threshの部分です)
引用するなら引用するで中途半端に引用せず、まずは丸写しで動くかちゃんと確認してください。
後は僕よりもOpenCVに詳しく開発経験の豊富な方に任せたいと思います。
Re: cv drone と ar toolkit についてのしつもんです
オフトピック
>卒論
いつまでにできればいいのかは学校毎に違うのかもしれませんけど,
私がいた大学だったら,今の時期に何もできてない状況だと末期的というかもう完全詰んでる感じでしたね.
LLさんのおっしゃることはわかりますが,
おそらく普通に段階を経ていく方法ではとても間に合わないので相当にあせっておられるのではないでしょうか.
(まぁそれでもCで作らないとダメなのであれば三日くらい全力でCの復習に費やした方が近道な気もします.)
例えば大学の卒論であれば,とりあえず似たジャンルのことを周りの人がやっていたりするのではないかと思いますので,
そういう人たちに頼み込んで,プログラムの既に動いている部分を融通してもらうとか,
ライブラリの使い方等について知っていることを教えてもらうとかいう方向を早急に試行すべきような気がします.
少なくともこういった掲示板に頼るよりは(そもそも卒論で掲示板頼っていいのだろうか?)先輩に頭下げるとかの方がまだ可能性があるのでは…?
いつまでにできればいいのかは学校毎に違うのかもしれませんけど,
私がいた大学だったら,今の時期に何もできてない状況だと末期的というかもう完全詰んでる感じでしたね.
LLさんのおっしゃることはわかりますが,
おそらく普通に段階を経ていく方法ではとても間に合わないので相当にあせっておられるのではないでしょうか.
(まぁそれでもCで作らないとダメなのであれば三日くらい全力でCの復習に費やした方が近道な気もします.)
例えば大学の卒論であれば,とりあえず似たジャンルのことを周りの人がやっていたりするのではないかと思いますので,
そういう人たちに頼み込んで,プログラムの既に動いている部分を融通してもらうとか,
ライブラリの使い方等について知っていることを教えてもらうとかいう方向を早急に試行すべきような気がします.
少なくともこういった掲示板に頼るよりは(そもそも卒論で掲示板頼っていいのだろうか?)先輩に頭下げるとかの方がまだ可能性があるのでは…?
私は AR Tool kit というのを使ったことありませんが,
よく,白黒の幾何学模様マーカを認識するのに使われてる奴ですよね?
そのライブラリに 画像からのマーカ認識処理 が存在するのではないでしょうか?(「AR Tool kit マーか認識」とかでググるとそんな雰囲気)
ardrone.getImage(); というので(ドローンに装備されているカメラか何かから?)画像を取得しているように想像しますが,
それとは別に OpenCVでも(別の?)カメラをキャプチャしようとしている目的は何でしょうか?
(結局そこから画像取得はされていないようですが,今後,必要になるという話?
それとも,なんとなく拾い集めたコードを意味がわからないままに切り張りした結果こんなことになってる?)
何が必要で何が不要なのか という整理から始めるべきなのかもしれません.
>後は僕よりもOpenCVに詳しく開発経験の豊富な方に任せたいと思います。
現状,何のためにOpenCVを使うのかわかりませんが,
AR Tool Kit の経験者が必要な気がしますね.
Re: cv drone と ar toolkit についてのしつもんです
オフトピック
フォーラムルールを読まれたとのことだけども念のための確認です
http://detail.chiebukuro.yahoo.co.jp/qa ... 0138331265
こちらはあなたの質問ではないでしょうか?
http://detail.chiebukuro.yahoo.co.jp/qa ... 0138331265
こちらはあなたの質問ではないでしょうか?
Re: cv drone と ar toolkit についてのしつもんです
はい、おっしゃる通り知恵袋の質問は私がしたものです、
その時はこちらで質問してすぐでしたのでフォーラムルールを読んでいませんでした。
以後、質問する際は、ルールを遵守していきたいと存じます。
ご迷惑をお掛けしました。
その時はこちらで質問してすぐでしたのでフォーラムルールを読んでいませんでした。
以後、質問する際は、ルールを遵守していきたいと存じます。
ご迷惑をお掛けしました。