fc2ブログ
 カレンダー

09月 │2023年10月│ 11月
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 - - - -

 プロフィール

はしもと

Author:はしもと
ユーザインタフェース系のお仕事をしてます.関心領域は画像処理,拡張現実感,ヒューマンコンピュータインタラクション,エンタテインメントコンピューティングあたり.モノ書きもやってます.

 工学ナビ

工学ナビは工学系の技術のチュートリアルを扱うサイトです.

 作ったもの

 Twitter

 

 天気予報


 ブログ内検索

 カテゴリー

最新コメント

 RSSフィード

 リンク

このブログをリンクに追加する




工学ナビの中の人 はしもとのブログです. いろんなコトを研究的,工学的な視点で見つめます.
AR.Droneプログラミング on Visual C++ 2008 OpenCV編
公式のサンプルコードをじっくり読んでみましたが,ちょっとばかり癖ありますね,これ.

ユーザ関数のいくつかがSDKのヘッダ内でプロトタイプ宣言してあって,
その指定された名前の関数の本体を自分で書くというというのが基本のスタイルです.
具体的には以下のような関数です.

ardrone_tool_init_custom : ユーザが定義する初期化関数
ardrone_tool_update_custom : ユーザが定義するアップデート関数
ardrone_tool_display_custom : ユーザが定義するディスプレイ関数
ardrone_tool_shutdown_custom : ユーザが定義する終了処理関数
ardrone_tool_exit : ユーザが定義する終了状態関数(?)

さらには,ビデオ処理をするスレッド,入力デバイス処理をするスレッド,
AR.Droneのセンサ状態を監視するスレッドなど,いくつかのスレッドを
自分で作る必要があります.

公式の解説は以下.
https://projects.ardrone.org/wiki/1/Developer_Guide
https://projects.ardrone.org/wiki/1/Developer_Guide_v2

で,基本的に公式のサンプルコード
\ARDrone_SDK\Examples\Win32\VCProjects\ARDrone\ARDrone.sln
を読むのがいちばん良いのですが,ちょっと素敵すぎるコードなので,
大幅にテコ入れしたものを用意しました.

大幅にテコ入れしたコードはこちら (AR.Drone+OpenCVのサンプルコード)

☆日本語でコメントつけてます.
☆コードをわかりやすくするために,入力デバイスはキーボードのみにしています.
☆コンソールのカーソル制御なども大幅カットして,本質的なコードのみ残しています.
☆需要がありそうなので,OpenCVで画像を描画するようにしています.

このテコ入れソースのうち,あなたがいじるべきソースは以下のとおりです.

・キーボード操作を変更したい → controller.cpp の update_dx_keyboard()関数
・カメラ画像に対する画像処理のコードを書きたい → image_processing.cpp の スレッドopencv_thread内
・起動時と終了時の処理を書きたい → custom_code.c の customと名のつく関数
・センサ情報に対する処理を書きたい → navdata.c の demo_navdata_client_process()関数

とりあえず今日はこのへんで.

AR.Drone Blue PF720002
AR.Drone Blue PF720002
パロット 2010-09-16
売り上げランキング : 549

おすすめ平均 star
starとにかく飛ばしたら分かります。このすごさ。
star墜落故障したので強度について
starAR.Droneは面白い。

Amazonで詳しく見る
by G-Tools


スポンサーサイト



AR.Droneプログラミング on Visual C++ 2008 インストールガイド
AR.Droneたのしいですよね.
2010年10月5日に公開された SDK1.5 からVisualC++での開発にも対応したようなので,
インストールからサンプルを動かすまでをレポートしたいと思います.

ARDrone
AR.DroneをPCから制御できたよ.

1.ARDRONE open API platformのWebサイトでアカウントを取る.
  ページ右上の「登録する」から登録ページに飛べる.
  
2.ARDrone APIのページに行く.ページ内に
  「Download full SDK source code, mutliplatform examples and documentation.」
  と書かれた箇所があるので,そこの[Download]のリンクをクリック.

3.配布中のSDKのリストが書かれたページに飛ぶので,
  そこから最新のものをダウンロードする.
  現時点の最新版は,1.5.0 ARDrone_SDK_1_5_Version_20101004.tar.gz

  ※以降の解説は,同梱されている以下のマニュアルに書かれている(英語)
  Examples\Win32\VCProjects\Installation.pdf

4.ダウンロードしたファイルを解凍する.tar.gzの解凍にはLhazなどを使う.
  解凍してでてきたファイルを適当なディレクトリに入れる.
  以下,C:\ARDrone_SDK にインストールしたものとして説明する.

 【フォルダ構成】
  C:\ARDrone_SDK
   ┣ ARDroneLib
   ┣ ControlEngine
   ┣ Docs
   ┗ Examples

5.Microsoft Visual C++ 2008 Express edition のインストール
  インストール手順は下記サイトを参考に.
  Visual C++ 2008 Express Edition インストール メモ@太田研究室
  インストールできたら,とりあえず1回は起動しておいたほうがいい.

6.Microsoft Windows SDK のインストール
  このページからダウンロードした winsdk_web.exe を実行する.  

7.Microsoft DirectX SDK のインストール
  このページからダウンロードした DXSDK_Jun10.exe を実行する.

  VisualC++を起動し,ライブラリの設定を行う.
  ツール→オプション→プロジェクトおよびソリューション→VC++ディレクトリ
  ・インクルードファイルに C:\Program Files\Microsoft DirectX SDK (June2010)\include を追加
  ・ライブラリファイルに C:\Program Files\Microsoft DirectX SDK (June2010)\Lib\x86 を追加

8.SDLのインストール
  このページから SDL-devel-1.2.14-VC8.zip をダウンロード

  解凍してできたSDL-1.2.14フォルダを適当な場所(C:\Program Filesなど)に
  移動する.includeフォルダの中にSDLという名前のフォルダを作り,
  includeフォルダの中に入っていたすべてのヘッダファイル(*.h)を
  SDLフォルダに移動する.

  【フォルダ構成】
   C:\Program Files\SDL-1.2.14
    ┣ docs
    ┣ include
    ┃ ┗ SDL(ここにヘッダファイルを格納する)
    ┃
    ┗ lib

  VisualC++を起動し,ライブラリの設定を行う.
  ツール→オプション→プロジェクトおよびソリューション→VC++ディレクトリ
  ・インクルードファイルに C:\Program Files\SDL-1.2.14\include を追加
  ・ライブラリファイルに C:\Program Files\SDL-1.2.14\lib を追加

9.Pthread for Win32のインストール(Windows XP以前の場合のみ)
  Pthread for Win32 library(FTPサイト)

  includeフォルダとlibフォルダを,フォルダごとダウンロードする.
  ダウンロードしたファイルを適当なディレクトリに置く.
  以下,C:\pthreads-win32にインストールしたものとして説明する.

 【フォルダ構成】
  C:\pthreads-win32
   ┣ include
   ┗ lib

  DLLがある場所にパスを通す.
  マイコンピュータ→プロパティ→詳細設定→環境変数
  Path に C:\pthreads-win32\lib を追加

  VisualC++を起動し,ライブラリの設定を行う.
  ツール→オプション→プロジェクトおよびソリューション→VC++ディレクトリ
  ・インクルードファイルに C:\pthreads-win32\include を追加.
  ・ライブラリファイルに C:\pthreads-win32\lib を追加.

10.以下のファイルを適当なテキストエディタで開き,ディレクトリの設定を
  自分の環境用に設定する.

  C:\ARDrone_SDK\Examples\Win32\VCProjects\ARDrone\ArDrone_properties.vsprops

 【変更箇所1】
  Value="d:\Parrot\ARDroneLib"
  ↓
  Value="C:\ARDrone_SDK\ARDroneLib"

 【変更箇所2】
  Value="d:\Parrot\Examples\Win32\sdk_demo\Sources"
  ↓
  Value="C:\ARDrone_SDK\Examples\Win32\sdk_demo\Sources"

11.VisualC++のソリューションをVisualC++で開く
  C:\ARDrone_SDK\Examples\Win32\VCProjects\ARDrone\ARDrone.sln

12.vp_os_signal_dep.h の以下の箇所について変更を行う.

  #define USE_WINDOWS_CONDITION_VARIABLES
  //#define USE_PTHREAD_FOR_WIN32

  【Windows Vista以降】(そのまま)
    #define USE_WINDOWS_CONDITION_VARIABLES
    // #define USE_PTHREAD_FOR_WIN32

  【Windows XP以前】
    // #define USE_WINDOWS_CONDITION_VARIABLES
    #define USE_PTHREAD_FOR_WIN32

13.ソリューションをビルドする.

14.プログラムが正常にビルドできたら,Win32Clientを実行.
ビデオ映像を受信しながらキーボードで操作できます.

<キーボードでの操作方法>
 Space: テイクオフ/ランディング
 Tab: 緊急停止/緊急停止解除
 i: 前方移動
 j: 左方移動
 k: 後方移動
 l: 右方移動
 o: 右旋回
 u: 左旋回
 q: 上昇
 a: 下降

screen_ARdrone
センシングしてるパラメータと映像が表示されます.

これならiPhoneを持っていない人でもWindowsのPCで制御して遊べますね.
ここまでくれば,あとはARToolKitなりOpenCVなりで映像を処理してごにょごにょ.

AR.Drone Blue PF720002
AR.Drone Blue PF720002
パロット 2010-09-16
売り上げランキング : 549

おすすめ平均 star
starとにかく飛ばしたら分かります。このすごさ。
star墜落故障したので強度について
starAR.Droneは面白い。

Amazonで詳しく見る
by G-Tools



iPadを使ったDisplay Based Computingの話
iPadは個人的に「重い」と思っているので、普段持ち歩くようなことはしていないのですが、
かといって、家で使うのかと言うと、家にはMacBook Proがあるのであまり使ってないのです。
僕は、手で持って使うよりは、テーブルに平置きするとか、壁にかけるとかの使い方のほうが
面白いと思っていて、「電子書籍リーダ」というより「Interactive Surface」として見ています。

で、こいつはタンジブル系のディスプレイ・インタフェースを作って遊ぶのが面白いんじゃないのかと。雑な言い方をすれば、ディスプレイの上にあれこれモノを置いて何かする系、ですね。

この方面だと、Display Based Computingという面白い研究があって、その例として、
ディスプレイに表示した画像を使ってロボットの動きを制御するというアイデアがあります。

DA_RMR.jpg
Relative Motion Racing

Relative Motion Racing というアート作品では、ディスプレイの上に小さなロボットが
いくつか載っていて、ディスプレイに表示されている動画に同期して動きます。
あたかもロボットが画面の中の流れる道路を走っているように見えます。
ロボットの底面に光センサがついていて、動画中の特殊な画像をトラッキングするように
なっています。ロボットの脳みそには「画像をトラッキングして動く」ということしか
インプットされていません。

通常、音楽や映像に同期してロボットみたいな機械的な何かが動くコンテンツを作るのは
恐ろしく大変なのですが、この方法を使えば、動画を作る過程で「動きの指示」を簡単に
組み込むことができます。

画像を使ってモノを制御できるということは、絵であればなんでも良くて、形式も作成ツールも
問いません。Flashでもいいし、GIFアニメでもいいし、YouTubeにうpした動画でもOK。
しかも、それを動かすインフラは、ディスプレイを備えた「何か」であればいい。
このスケーラビリティの高さは目を見張るものがあります。

で、話はiPadに戻るのですが、iPadはDisplay Based Computing をやるのにぴったりなインフラ
じゃないかなと思ってます。薄くて平置きに適していて、ネットに繋がるコンピュータだという点で。

正規の方法でiPadアプリを作る必要はなく、Javascriptで動くWebサイトを
作っておいて、それをSafariで表示したり、上記の仕掛けを組み込んだ動画を
YouTubeにうpしておいてそれを表示する、という方法が使えます。

さて。前置きが長くなりましたが、一晩で作ったおもちゃを紹介します。

Sensor Doll on iPad



フィギュアの中に光センサ(cds)を使った単純な回路が組み込まれていて、
光に反応して目が光ります。まぁそれだけの仕組みなんですが、iPadに載せて
点滅が多い動画をYouTubeで再生すると、それに同期して目がペカペカ光って
面白いです。

マイコンを使えば、特殊なパターンで発光させてそれを読み取ってごにょごにょ...
という話もありますが、それはまぁそのうち。

ディスプレイの上に何か置く系の研究は昔からたくさんあるので、それをiPad用にアレンジ
するのも面白いと思います。The ACM International Conference on Interactive Tabletops
and Surfaces というズバリこれ系を扱う国際会議もあるので、そちらも参考に。

上に載っているモノを検出するしくみをちゃんと入れて、ディスプレイ面を境界として、
リアルとバーチャルが相互に影響しあうインタラクティブなモノを作るときっと楽しいです。

というわけで、今日はここまで。


ファイアボール ねんどろいど ドロッセル (ノンスケールPVC&ABS塗装済み可動フィギュア)ファイアボール ねんどろいど ドロッセル (ノンスケールPVC&ABS塗装済み可動フィギュア)
(2009/12/12)
グッドスマイルカンパニー

商品詳細を見る