<?xml version="1.0" encoding="UTF-8" ?><rdf:RDF 
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:atom="http://www.w3.org/2005/Atom"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
  xml:lang="ja">
  <channel rdf:about="http://w.atwiki.jp/mypad/">
    <title>自作パッドのススメ</title>
    <link>http://w.atwiki.jp/mypad/</link>
    <atom:link href="https://w.atwiki.jp/mypad/rss10.xml" rel="self" type="application/rss+xml" />
    <atom:link rel="hub" href="https://pubsubhubbub.appspot.com" />
    <description>自作パッドのススメ</description>

    <dc:language>ja</dc:language>
    <dc:date>2014-06-04T23:46:41+09:00</dc:date>
    <utime>1401893201</utime>

    <items>
      <rdf:Seq>
                <rdf:li rdf:resource="https://w.atwiki.jp/mypad/pages/42.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/mypad/pages/1.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/mypad/pages/41.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/mypad/pages/40.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/mypad/pages/36.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/mypad/pages/39.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/mypad/pages/38.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/mypad/pages/37.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/mypad/pages/30.html" />
                <rdf:li rdf:resource="https://w.atwiki.jp/mypad/pages/20.html" />
              </rdf:Seq>
    </items>
	
		
    
  </channel>
    <item rdf:about="https://w.atwiki.jp/mypad/pages/42.html">
    <title>3Dプリンタ作ったる</title>
    <link>https://w.atwiki.jp/mypad/pages/42.html</link>
    <description>
      -ハード
ホットエンド
https://www.hotends.com/index.php?route=product/product&amp;product_id=88
頼んだのは
フィラメント直径0.75mm
出力直径0.4mm
6000円くらい

モータードライバなど
ArduinoMEGAのシールドRAMPS1.4
http://www.aliexpress.com/item/1pcs-Mega-2560-R3-1pcs-RAMPS-1-4-Controller-5pcs-A4988-Stepper-Driver-Module-1pcs-2004/1487027133.html
5000円くらい

ケーブル類
http://www.aliexpress.com/snapshot/6111625296.html
1500円くらい

リニアベアリング10個内径12mm
http://www.aliexpress.com/snapshot/6111625297.html
1000円くらい

カプトンテープ（耐熱テープ、ホットエンド固定用）
http://www.aliexpress.com/snapshot/6111625299.html
500円くらい

-ファームウェア＝ArduinoMEGAに書き込むやつ
Marlin
ここ
https://github.com/ErikZalm/Marlin/tags
からダウンロードして
Marlinフォルダの中にある
Configuration.h
ボーレートは250000になってるか確認
をArduinoで開いて書き込む

-ホストソフト＝PCにインストールするやつ
Repetier-Host Mac
ここから
http://www.repetier.com/download/
インストールして
PrinterSettingをひらいて、
ポートをusbに
ボーレートを250000
にあわせる。    </description>
    <dc:date>2014-06-04T23:46:41+09:00</dc:date>
    <utime>1401893201</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/mypad/pages/1.html">
    <title>トップページ</title>
    <link>https://w.atwiki.jp/mypad/pages/1.html</link>
    <description>
      openFrameworks

*ofxARToolkitPlus
|[[ofxARToolkitPlus]]|[[ofxARToolkitPlusの使い方]]|
|[[独自マーカーを使いたい]]|[[10.7でofxARToolkitPlusを動かす]]|
|[[ARtoolkitの概念を学ぶ１]]|[[Plusにオリジナルマーカーを登録する]]|
|[[３日の調査の末]]|[[開発再開]]|
結論：オリジナルマーカーをopenframeworksから使う事はできませんでした。
オリジナルでなければofxARToolkitPlusからつかえます。

ARtoolkit
|[[ARToolkitのMarkerInfo]]|

関連ブログ
http://310tetsuji.wordpress.com/wp-admin/post.php?post=192&amp;action=edit&amp;message=6&amp;postpost=v2

|[[WPを100倍速くする&gt;http://hara19.jp/archives/5817]]|[[デバッグ、可視化]]|[[お役立ちアプリ]]|[[OPENGL]]|[[おもしろメディア]]|[[webGL]]|
|[[クラウドWEB構築]]|[[HMD]]|[[お役立ちアプリ]]|[[OPENGL]]|[[おもしろメディア]]|[[webGL]]|
|[[縦画面表示]]|[[グラフィックディスプレイ]]|[[キャラクタディスプレイ]]|[[ことえり]]|[[おもしろメディア]]|[[ペーパープロジェクション]]|
*自作パッドの世界へようこそ。
&amp;youtube(http://www.youtube.com/watch?v=Me6kVDw_42c){425,350}

&amp;youtube(http://www.youtube.com/watch?v=D0Ztbugequ8){425,350}

#image(http://www43.atwiki.jp/mypad?cmd=upload&amp;act=open&amp;pageid=16&amp;file=MYPAD_image.png)
コンセプト画

実際に動かしている様子
&amp;youtube(http://www.youtube.com/watch?v=1To2hgx3nTg){425,350}

だれでもメディアアーティストの時代、ディスプレイタブは買うのではなく、作ってみましょう。
ペンタブとUSBディスプレイですぐに作れる自作パッド。趣味、研究、いろんなシーンで使えるアイデアを集める為のwikiです。
フィジカルコンピューティングなんて知らない人でもすぐに作れる自作パッドの奥が深い世界。
学生の皆さん、自作の作品をコントロールするデバイスとして、１つ作ってはいかが。
※これはオープンプロジェクトです。wikiもオープンです。情報共有の為に自由にアップロードして下さい。


自作パッドって何？という方は以下をざっくり読んでください。
|[[自作パッドとは]]|[[自作パッドの作り方]]|[[コンセプト]]|

素材について
|パッド筐体|[[ディスプレイ]]|ペンタブ|各種センサ|[[映像転送技術]]|[[AR技術]]|

コンセプトモデル

このページは、世の中にあるモニタ、プロジェクタ、カメラ、コンピュータなどの映像機器を組み合わせて、自分だけの映像装置（＝自作メディア）を自作してしまおう。という趣旨に基づいた、きわめてDIY的なWIKIサイトです。

いちからつくらない。
あるものを使う。

がモットーです。これをデバイスブリコラージュと名付け、普及活動中です（笑）。    </description>
    <dc:date>2013-02-26T18:11:25+09:00</dc:date>
    <utime>1361869885</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/mypad/pages/41.html">
    <title>開発再開</title>
    <link>https://w.atwiki.jp/mypad/pages/41.html</link>
    <description>
      一週間近くたって再稼働。原発再稼働反対。オープンソース万歳。
最近寒くなってきました。
その間kinect用のアプリとphpのプログラムをざっくり完成させ、ARTK再開である。
さて、ofxARToolKitPlusを使ってタグらしき場所の取得はできるようになった。
この次である。コンフィデンス（マーカーらしさ）の判定ができていないのだ。
ARTKPlusの基本的なタグ操作の流れは、こんな感じだ。

 tracker = new ARToolKitPlus::TrackerSingleMarkerImpl&lt;6,6,6, ARToolKitPlus::PIXEL_FORMAT_LUM, 10&gt;(width,height);
	const char* description = tracker-&gt;getDescription();
	printf(&quot;ARToolKitPlus compile-time information:\n%s\n\n&quot;, description);
	tracker-&gt;setLogger(&amp;logger);
	tracker-&gt;setPixelFormat(ARToolKitPlus::PIXEL_FORMAT_LUM);	
	if( !tracker-&gt;init((const char *)ofToDataPath(camParamFile).c_str(), 1.0f, 5000.0f))	{
		printf(&quot;ERROR: init() failed\n&quot;);
		delete tracker;
		return;
	}
 tracker-&gt;setBorderWidth(useBCH ? 0.125f : 0.250f);
 tracker-&gt;setThreshold(85);
 tracker-&gt;setUndistortionMode(ARToolKitPlus::UNDIST_LUT);
 tracker-&gt;setPoseEstimator(ARToolKitPlus::POSE_ESTIMATOR_RPP);
 tracker-&gt;setMarkerMode(useBCH ? ARToolKitPlus::MARKER_ID_BCH : ARToolKitPlus::MARKER_ID_SIMPLE);
 tracker-&gt;setPatternWidth(80);   
 tracker-&gt;addPattern ((const char *)ofToDataPath(pattFile).c_str()); 
 
 こんな感じで    </description>
    <dc:date>2012-11-20T14:19:27+09:00</dc:date>
    <utime>1353388767</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/mypad/pages/40.html">
    <title>３日の調査の末</title>
    <link>https://w.atwiki.jp/mypad/pages/40.html</link>
    <description>
      前回は惨敗。なんでかっていうとOFのフォーラムになんか使えそうな記事を発見
http://forum.openframeworks.cc/index.php?topic=5031.msg25335#msg25335
ofxARToolKitPlusに触ることなく解決しようと思ったが、クラスの継承がよくわかんなくて惨敗。まあ、作品を作る限定的なことなので、[[ofxARToolkitPlus]].cppをいじってしまおうと決断。ラッパーを作るのがめんどくさいけど。

 class TrackerSingleMarker : public Tracker

とあるので、TrackerSingleMarkerとTrackerMultiMarkerはTrackerクラスを継承しているとわかる。C++のクラスについてよくわかっていないので、勉強する。

http://www.geocities.jp/ky_webid/cpp/language/012.html
より
&quot;new演算子を使うとメモリの動的確保が行え、delete演算子によって解放することができます。ここで注意して ほしいのですが、newとdeleteは演算子です。mallocやfreeは関数です。この違いには重要な意味があるのです&quot;

うーんおもろい。

でも問題はnewできないんだけどな。少なくともTrackerSingleMarkerクラスなど派生クラスにはデストラクタしかない。コンストラクタは、Trackerにあるのか見てみる。ないな。
TrackerMultiMarkerImpl.hあった。TrackerSingleMarkerImpl.hこっちもあった。
TrackerSingleMarkerImplはTrackerSingleMarkerを継承しているクラスである。

 TrackerSingleMarkerImpl(int nWidth=DEF_CAMWIDTH, int nHeight=DEF_CAMHEIGHT);

ということなので、引数を２個入れればnewできるっぽい。無理。「こういうのインターフェースクラスっていうんだよ、バカ」って、機械に教えられたので調べる。

http://www.geocities.jp/ky_webid/cpp/language/010.html
より
&quot;インタフェースクラスは、メンバ変数を持たず、メンバ関数だけで構成されます。 そして、それらのメンバ関数は、宣言だけされていて定義がありません。 定義のないメンバ関数を持っている都合上、インタフェースクラスをインスタンス化することもできません。 一見、何のために存在しているか分からないですが、インタフェースクラスは、継承して使うためにあります。 そして、定義のないメンバ関数達は、オーバーライドして使います。&quot;

結局よくわからなかったけど、こいつのnewするのはだめそうだ。と思いきや。
http://forum.openframeworks.cc/index.php?topic=743.60;wap2
に
 mTracker = new ARToolKitPlus::TrackerSingleMarkerImpl &lt;6, 6, 12, 1, 10&gt; (mWidth, mHeight);
という宣言方法があったので試してみると一応通った。
この数字はいったい何をしているのかきになったので　調べると。

  /// TrackerSingleMarkerImpl implements the TrackerSingleMarker interface
  /**
  *  __PATTERN_SIZE_X describes the pattern image width (16 by default).
  *  __PATTERN_SIZE_Y describes the pattern image height (16 by default).
  *  __PATTERN_SAMPLE_NUM describes the maximum resolution at which a pattern is sampled from the camera image
  *  (64 by default, must a a multiple of __PATTERN_SIZE_X and __PATTERN_SIZE_Y).
  *  __MAX_LOAD_PATTERNS describes the maximum number of pattern files that can be loaded.
  *  __MAX_IMAGE_PATTERNS describes the maximum number of patterns that can be analyzed in a camera image.
  *  Reduce __MAX_LOAD_PATTERNS and __MAX_IMAGE_PATTERNS to reduce memory footprint.
  */
 
 これはTrackerImplで以下のように使われる。
 
 /// TrackerImpl implements the Tracker interface
 template &lt;int __PATTERN_SIZE_X, int __PATTERN_SIZE_Y, int __PATTERN_SAMPLE_NUM, int __MAX_LOAD_PATTERNS, int __MAX_IMAGE_PATTERNS&gt;
 class TrackerImpl : public Tracker
 {
 public:
	enum {
		PATTERN_WIDTH = __PATTERN_SIZE_X,
		PATTERN_HEIGHT = __PATTERN_SIZE_Y,
		PATTERN_SAMPLE_NUM = __PATTERN_SAMPLE_NUM,

		MAX_LOAD_PATTERNS = __MAX_LOAD_PATTERNS,
		MAX_IMAGE_PATTERNS = __MAX_IMAGE_PATTERNS,
		WORK_SIZE = 1024*MAX_IMAGE_PATTERNS,

 #ifdef SMALL_LUM8_TABLE
		LUM_TABLE_SIZE = (0xffff &gt;&gt; 6) + 1,
 #else
		LUM_TABLE_SIZE = 0xffff + 1,
 #endif
	};
	
--
一日経って

昨日はノートPCの上にみそ汁をこぼし、頭が真っ白になる。不幸中の幸いにも、データが飛ばなかった。キーボードがショートしているみたいだ。したボタンが効かない。でも壊れるのはいつになるかということで、開発時間の大半をバックアップにとられた。

1行も進展しないまま、三日目になった矢先の事件のため、さすがに精神的にきつくなる。朝起きて、パソコンと向き合い、夜が来る。基本コードをよんでいるだけ。さすがに集中力がなくなり、床につく、、、。頭の中では、こうすれば、、、ああすれば、、、とぐるぐる回っている。

マーカー情報がどうしてもかえってこないのだ。
今日もだめかもしれないな、、、と朝から3時間ほどリサーチを続けると、元ソースが複雑に処理している部分に気づく。文献をあたると、そこまで複雑な条件判定をかけていない。これを外し、coutでコンソールに値を出すと、なんと動きはじめた。確かに何かを認識している動きである。

 for(j = 0; j &lt; marker_num; j++){
		
        if(nPattern==marker_info[j].id){
            if(k == -1)k = j;
			else if(marker_info[k].cf &lt; marker_info[j].cf)k = j;
        }
	}
	
cfという情報はコンフィデンスもっともらしさを数字で表したもの。
ふー、なんとか動き出した様子である。後はこれをどう取り出すかだなあ。

 if(nMarker_info)
		*nMarker_info = marker_info;
	
このようにmarker_infoと書いてあるのはARMarkerInfoというクラスのオブジェクトなので、nMarker_infoがさしているポインタがさしているポインタ、のなかにその実態があるはず、、、。どこだ？    </description>
    <dc:date>2012-11-20T13:58:37+09:00</dc:date>
    <utime>1353387517</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/mypad/pages/36.html">
    <title>10.7でofxARToolkitPlusを動かす</title>
    <link>https://w.atwiki.jp/mypad/pages/36.html</link>
    <description>
      *おすすめ記事
osをmacの10.7lionにしたらxcode4になったのでの開発対象が10.6以降になってしまって、そのきになって、openframeworksのバージョンも72とかにあげたら[[ofxARToolkitPlus]]が動かなくなりました。

で、そのまま放置していたんですね。

でも、けっこう[[前のページ&gt;http://www43.atwiki.jp/mypad/pages/20.html]]の注目度が高くてうれしいのと、作品つくるのに必要になったこともあって、もう10.7での実行環境を一度整理しておこうと思います。助かる人もいるかも知れないので。
まず、前に紹介したofxARToolkitPlusの実行環境について整理しておきます。

開発環境は10.6です。
xcodeのバージョンは3でした。
書き出しは10.5用のソフトウエアです。
openframeworksのバージョンは61または62でもいけるかな、、、。

この一見古めかしい開発環境がとても大切です。

開発環境は10.6とか10.7でもいいんですが、おそらくコンパイラと、exampleの依存ファイルの関係で、openframeworksのバージョンは61でなければ、10.5sdkでの書き出しができる、xcode3できなければければうまくコンパイルできないようです。
Xcodeの3と4でsdkに互換性がないのか、sdk入れただけだとうまく動きませんでしたので調査中です。

ということで、xcode３さえあれば動く（と思う）データをとりあえず丸ごとおいておきますので、使えたら使ってください。
サーバー超不安定なので、ありがたがってくれるひとで時間があるひとはgitHubとか使える人はうまいことあげといてください。xcode4でも使えるようにしてください。英語できる人は、使い方訳しておいて下さい。
適当ですみません。

http://310tetsuji.ddo.jp/download/00_of_preRelease_v0061_osxSL_FAT.zip

Xcode3もおいとこうかと思ったんですが、4GBもあったんで，ちょっと保留です。どっかからGetできるかな、、、。新しいのが何でもいいって訳じゃないんですよね。

→ありました。
http://www.msng.info/archives/2011/11/download-xcode-3.php
ADC（アップル開発者センター）に登録する必要があります。アートディレクターズクラブではなくww。    </description>
    <dc:date>2012-11-16T10:56:58+09:00</dc:date>
    <utime>1353031018</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/mypad/pages/39.html">
    <title>Plusにオリジナルマーカーを登録する</title>
    <link>https://w.atwiki.jp/mypad/pages/39.html</link>
    <description>
      *成功せず
オリジナルマーカーを登録する

前回の調査でPlusのマルチマーカーの処理の流れはわかった。
最後はofにARMarkerInfoクラスとして渡せればいい。

ARToolkitではパターンファイルを読み込むときに
char*patt_nameというポインタアドレスにファイル名を入れ、double patt_widthでパターン幅を定義する。それからarLoadPatt(patt_name)メソッドで読み込むというのが流れ。
Plusでもこれができればよい。
TrackerSingleMarkerImpl.hヘッダーファイルに

 int arLoadPatt(char *filename)  {  return AR_TEMPL_TRACKER::arLoadPatt(filename);  }

というインターフェース(ラッパークラス？)がある。

実体はcore/arGetCode.cxxの中に

 AR_TEMPL_FUNC int
 AR_TEMPL_TRACKER::arLoadPatt(char *filename)

これっぽい。charで渡せば使えそう。戻り値がintということだが何が返ってくるのか、、、。

 return( patno );

とのこと。処理内容をみると、パターンファイルを開いて、認識したらマーカーをパターンとして登録したらIDをふってintで返しつつ、同時にいくつあるかを数えてるっぽい。まずは使うタグを登録ってことで。

ここまでで何となく[[ofxARToolkitPlus]].cppを改造してみる



カメラパラメータはparamFile.cxxにある、

 AR_TEMPL_FUNC int
 AR_TEMPL_TRACKER::arParamLoadDouble( char *filename, int num, ARParamDouble *param, ...)

が使えそう。

でも今回はシングルマーカーを複数使う必要がありそうなので調査。
使えそうなのは2つのファイル
 TrackerSingleMarker.h
TrackerSingleMarkerImpl.h

はじめにシングルマーカー用のトラッカークラスを作る必要があると思う。
ひとまずTrackerSingleMarkerImpl.cxxのメンバ関数をみてみる。

 ARSM_TEMPL_TRACKER::TrackerSingleMarkerImpl(int nWidth, int nHeight)

の中で、画面の大きさなどを登録してトラッカークラスを作れそう。    </description>
    <dc:date>2012-11-16T10:56:19+09:00</dc:date>
    <utime>1353030979</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/mypad/pages/38.html">
    <title>ARtoolkitの概念を学ぶ１</title>
    <link>https://w.atwiki.jp/mypad/pages/38.html</link>
    <description>
      この中ではにたような言葉が使われますので、手元にダウンロードして違いを理解してから読んでください。
-ARtoolkit(=ARTK＝本家)→[[hp&gt;http://www.hitl.washington.edu/artoolkit/]]
-ARtoolkitPlus（=Plus＝発展系亜種）→[[hp&gt;http://handheldar.icg.tugraz.at/artoolkitplus.php]]
-ofxARToolkitPlusExample(example=ofxをつかったxcodeのofサンプル)→[[hp&gt;http://310tetsuji.ddo.jp/download/00_of_preRelease_v0061_osxSL_FAT.zip]]→[[hp2&gt;http://interactivefabrication.com/misc/ofxARToolkitPlus.zip]]
-ofxARtoolkitPlus（ofx=openframeworksアドオン上のに入ってるやつ）
ちなみに環境はosx10.7,xcode3,openframeworks61です。

----

ARtoolkitの概念をまず勉強する。
ARtoolkitではまずカメラの補正と、マーカータグの登録を行います。
カメラの補正は動けばいいやってことで、適当にしがちですが、[[ディスプレイ]]環境とか複数マーカー環境ではやっておくべきでしょう。これって、web環境ではカメラデバイスの補正値を最初に取得させるんでしょうかね、、、。それともメーカーの型番とかから判定するのかな、、、。

ofで[[ofxARToolkitPlus]] artk;というラッパークラスをつかって作ると、ofからPlusが使えるようになります。artkはofxARToolkitPlusオブジェクトです。artk.setup()で内部的にはカメラパラメーターを取得します。addon/ofxARToolkitPlus/ofxARToolkitPlus.cppとヘッダファイルをみると

 void ofxARToolkitPlus::setup(int w, int h) {
	// load std. ARToolKit camera file	
	// These need to be in the data folder
	setup(w, h, &quot;LogitechPro4000.dat&quot;, &quot;markerboard_480-499.cfg&quot;);
 }
とあります。
ARToolKit camera fileとあるので、カメラ補正自体はARToolkitの付属ソフトで作れるはず（と思う）。
アドオンに入っているかと思えば、入っていないので、まあ自分で探せということでしょう。
http://www.hitl.washington.edu/artoolkit/download/
からダウンロードしておいてください。
ARToolkit/bin/calib_camera2.exe
がそれです。
[[この辺り&gt;http://blogs.yahoo.co.jp/puredeasuseiun/22838430.html]]で方法を学習してください。
たとえばLogitechPro4000.datというデータができたとしましょう。
できたらxcodeのアドオンサンプルの中のdataフォルダに入れておきます。
付属ソフトをつかって、カスタムタグの登録もできます。
ARToolkit/bin/mkpatt.exe
でできます。
おなじく[[この辺り&gt;http://blogs.yahoo.co.jp/puredeasuseiun/22844554.html]]で学習して下さい。
例えばpatt.hiroとかいうデータができるはずです。
これでLogitechPro4000.datとpatt.hiroというカメラ設定とオリジナルマーカー設定の2つに必要なデータができました。
ARToolkitのソフトでつくったパラメータファイルがARToolkitPlusで動くのかどうか？これを次に検証します。

exampleのdataフォルダの中にデフォルトでおいてあるLogitechPro4000.datの内容をみてみます。すると、人の言葉でないので読めない。たぶんバイナリデータだと思うのですが、バイナリエディタで読んでみましたが意味は不明。さてどうしましょ。このデータができるプロセスをみてみることにします。

Plusの内部的には TrackerMultiMarkerImplというトラッカークラスを内部的に生成します。
トラッカークラスとマルチマーカーという新しい言葉がでてきました。

トラッカークラスは映像からマーカーを抽出するためにもうけられた抽象的なクラスと推測できますが、どうなんでしょう、、、。

マーカーはシングルマーカーとマルチマーカーの２つがあります。シングルマーカーはひとつのマーカーです。一方マルチマーカーとは一枚の紙に複数のマーカを印刷したものということで、複数のマーカーの相対的な距離まで登録されているので、ひとつだけ欠けたとしても、周りのマーカーから類推して表示することができるタイプのマーカーです。[[こちらを参照&gt;http://blogs.yahoo.co.jp/puredeasuseiun/23269629.html]]マーカーのサイズはいろいろあってもかまわないようですが、相対的な距離を指定して決めておかないといけません。

複数のマーカーをmkpatt.exeでつくっておいて、ARToolkit/bin/Data/multiフォルダにいれて、定義ファイルmarker.datとかいうをテキストファイルでつくって同じフォルダに入れておくというのが流れのようです。が、exampleにはAllBchThinMarkers.pngという画像ファイルと、markerboard_480-499.cfgという謎の拡張子（たぶんコンフィグ）のファイルしかありません。怪しいですね。これを開いてみると、バイナリではなく、テキストでした。おお、マルチマーカの定義ファイルのようです！発見。でも480番から499番までの20個しか定義されていません。さてどうしましょう？

ofで
setup(w, h, &quot;LogitechPro4000.dat&quot;, &quot;markerboard_480-499.cfg&quot;);
と記述したところは最終的にPlusのトラッカークラス内で
arMultiReadConfigFile(nMultiFile)
とかいう関数で処理されています。

マルチマーカーの定義ファイルの読み込みはARTK的にはarMulti.hに書いてあるとのことなのですが、Plus的にはarMultiReadConfigFile.cxxっぽいのでこれを読んでみます。（アドオンのソースにはいってる）

ARMultiEachMarkerInfoT *marker;っていうポインタアドレスに
arMalloc(marker,ARMultiEachMarkerInfoT,num);でマーカー個数分の構造体が入るためのメモリ領域を確保してるみたい。
arMallocはar.hで定義されてる。中をみると、構造体がARMarkerInfoとARMarkerInfo2の2タイプあるけど、どちらもマルチマーカー用ではないようです、、、。
    int     area;
    int     id;
    int     dir;
    ARFloat  cf;
    ARFloat  pos[2];
    ARFloat  line[4][3];
    ARFloat  vertex[4][2];
が定義されている。
これはARTKでいうとこの[[ARMarkerInfo&gt;http://310tetsuji.wordpress.com/2012/10/26/artoolkitのarmarkerinfo/]]（マーカーひとつが持っている属性を束ねた構造体）という構造体と一緒ですね。

arMultiReadConfigFileをみると

 marker[i].patt_id
 marker[i].width
 marker[i].center[0~1]
 marker[i].trans[0~2][0~3]
 marker[i].pos3d[0~3][0~2]

があるからmarker構造体がどっかにあるはず？とおもって探すと。

ARMultiEachMarkerInfoT  *markerと
ARMultiMarkerInfoT　*marker_info
構造体が定義されているのはarMulti.hだとわかりました。

 typedef struct {
    int     patt_id;
    ARFloat  width;
    ARFloat  center[2];
    ARFloat  trans[3][4];
    ARFloat  itrans[3][4];
    ARFloat  pos3d[4][3];
    int     visible;
 /*---*/
    int     visibleR;
 } AR_EXPORT ARMultiEachMarkerInfoT;
つまりマーカー個別の情報ね

 typedef struct {
    ARMultiEachMarkerInfoT  *marker;
    int                     marker_num;
    ARFloat                  trans[3][4];
    int                     prevF;
 /*---*/
    ARFloat                  transR[3][4];
 } AR_EXPORT ARMultiMarkerInfoT;
つまりマーカー個別の情報がいくつどっち向いてんの？みたいなやつね。

戻り値として、ARMultiMarkerInfoT構造体をリターンします。中には個別の情報も入ってる。便利。ポインタってnewしなくていいの楽だな。倉庫に適当においとけ、場所だけメモっとけってことだもんね。

でも，結局パターンファイルを読み込みんでいるだけで、コンフィグデータの内容まではわかりませんでしたね、、、。まあ、そんなもんです。

では今度は画像をどうやって読み込んでいるのかを検証してみます。
of的には
 artk.update(grayImage.getPixels());
という記述です。
 ofxCvGrayscaleImage grayImage;
このgrayImageというクラスはなんと、openCVアドオンのクラスです。
 grayImage.allocate(width, height);
すると
 unsigned char* 	pixels;
というchar型（0~255の値×画素数）が格納されているポインタアドレスを返してきます。
こりゃ便利。
grayImage.getPixels()メソッドは画素そのものをゲットするのではなく、画素をpixelsというポインタアドレス上に格納してそのアドレスだけ返してます。なんて効率的！C言語って感じですね〜。
 artk.update(画像のポインタアドレスを渡す);
までわかりました。
これをPlusの内部的にはどう処理しているのかをみていきます。

 int ofxARToolkitPlus::update(unsigned char *pixels) {
	return tracker-&gt;calc(pixels);
 }
calcに渡すだけ、、、。colcは何を返すのか、、、。TrackerMultiMarkerImpl.cxxをみてみます。

当然intなのですが内容はnumDetectedなので、認識したタグの個数ですね。
処理内容は認識した個数分のidとARMarkerInfo構造体を
TrackerMultiMarkerImpl.hで定義されている２つのプロテクト変数に格納します。

 int				detectedMarkerIDs[AR_TEMPL_TRACKER::MAX_IMAGE_PATTERNS];
 ARMarkerInfo	detectedMarkers[AR_TEMPL_TRACKER::MAX_IMAGE_PATTERNS];

それから、バトンしてofまでint型でマーカーの個数を返します。

では次
 artk.draw(640, 0);
はどうでしょう。
 ARToolKitPlus::ARMarkerInfo marker = tracker-&gt;getDetectedMarker(i);
でARMarkerInfoをごっそりゲットして
 marker.vertex[0][0]
こんな感じでメンバ変数を使えちゃうということらしいですね。

うーん。なるほど〜。
でもやりたいポイントは、違うんよね〜。
では次こそは、オリジナルマーカーの登録を目指します！    </description>
    <dc:date>2012-11-15T14:29:20+09:00</dc:date>
    <utime>1352957360</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/mypad/pages/37.html">
    <title>独自マーカーを使いたい</title>
    <link>https://w.atwiki.jp/mypad/pages/37.html</link>
    <description>
      [[ofxARToolkitPlus]]をつかって独自マーカーを使えるようにしたい。

いま、作品の開発を行っているんですけど、ofxARToolkitPlusを使って独自マーカーを使えるようにしたいと思っています。「なんで，遅くなる方法をさがすの？」と不可解に思われるかもしれませんが、どうしてもオリジナルイラストをマーカーに使いたいという需要があるのです。で、調べていくとたぶん使えそうなことがわかってきました。

ofxARToolkitPlusというアドオンは事実上ARtoolkitPlusのラッパー（ofからアドオンとして使えるようにインターフェイスを作ったもの、ofxはofのアドオンであることの接頭辞）です。しかしこのARtoolkitPlusの日本語情報はあまりないので、まとめておこうという次第です。自分用のメモですので誤りがあるかもしれません。引用などしてフォローいただければありがたいです。
まず、日本語情報をざっと集めてわかったことと、わからないことをかいてみます。

日本語情報
[[こちらのサイト&gt;http://oshiro.bpe.es.osaka-u.ac.jp/people/staff/imura/computer/OpenGL/artp/disp_content]]をみるとARToolKitPlusはオープンソースであり、開発は2006年6月で終了しています。つまり、コード自体はもう6年も前の環境なんですね。なので、ofのアドオンもそれ以降（おそらくofの61くらい）に作られましたが、ofのバージョンはあがっていくので、サンプル動かないというものが増えています。これは、ARToolKitPlusのせいではなく、アドオンが依存しているofファイルがどんどん新しくなるので、整合性がとれなくなっているためと考えられます。

ofxARToolkitPlusのアドオンはMac環境ではxcode10.5でofのバージョン61-62あたりで動くことを確認しています。この辺の詳細は[[こちら&gt;http://www43.atwiki.jp/mypad/pages/36.html]]に書いておきました。

ofxARToolkitPlusはofのバージョンによって仕様が乱立しているようで、いま2012年11月、新しい環境で動くものは探してないのですが、探してもしなくて、時間があればofxARToolkitPlusを改造して現在の環境で動くxcodeプロジェクトexampleを書かせていただきたいなとも思っています。また仕様を増やすことになりますので事前リサーチは大事、、、。

また、ARToolKitPlusはさらにプリミティブなARToolKitによって作られています。このARToolKitはオリジナルマーカーで使うことを前提としているので、処理速度が遅くなるという点をビットコード化し、改善したのがARToolKitPlusのようです。それをofアドオン用にラップしたのがofxARToolkitPlusです。その辺りは、前回の作品で開発協力をお願いした友人のブログに詳しく書いてあります。”独自マーカーは使えないと思う”とありますが、たぶん使えると踏んでます。

ARToolkitPlusは後継のStudierstube Trackerに引き継がれたがオープンソースではなくなったとのこと。うーん、オープンソースのありがたみがわかっているので、ちょっと選択肢から外れます。

ここまでで、ofxARToolkitPlusの実体はARToolKitPlusやARToolKitだとわかったと思いますので、オリジナルマーカーが使えないはずはないという信念が生まれました。この信念が無駄になってはいけません。そして、信念が無駄になることが多いのもプログラムならではです。３日つぶしたけど、できなかったとかザラですし。複雑に考えてたけど2行でできた、とか-1が1
だと動いたとか。そんなときは俺の人生の3日間って何だろうと思います、、、。

気を取り直して、実際にARToolKitPlusやARToolKitを読み解いてofで動かせるように実装してみよう。というのが企画の趣旨です。

追ってARtoolkitPlusの関数群の意味がよく分からないとか、カメラパラメータの取得や、オリジナルマーカーの登録は、ARToolKitPlusとARToolKitで果たして違うのか？といったことを検証していきます。
[[この&gt;http://forum.openframeworks.cc/index.php?topic=6131.0]]様なモデルの表示もできるといいですし、、、。    </description>
    <dc:date>2012-11-15T09:58:59+09:00</dc:date>
    <utime>1352941139</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/mypad/pages/30.html">
    <title>ofxARToolkitPlusの使い方</title>
    <link>https://w.atwiki.jp/mypad/pages/30.html</link>
    <description>
      [[ofxARToolkitPlus]]
[[独自マーカーを使いたい]]
[[10.7でofxARToolkitPlusを動かす]]
[[3D座標系の話3&gt;http://oshiro.bpe.es.osaka-u.ac.jp/people/staff/imura/computer/OpenGL/artp/disp_content]]
[[3D座標系の話2&gt;http://www.cg-ya.net/i-media/ar/artoolkit_multiMarker.html]]
[[3D座標系の話&gt;http://www.cg-ya.net/i-media/ar/artoolkit_first.html]]
[[tracker-＞がさしているソース]]
[[マーカー間の距離を求めたい]]
[[特定のIDマーカを操作する]]    </description>
    <dc:date>2012-11-15T08:11:25+09:00</dc:date>
    <utime>1352934685</utime>
  </item>
    <item rdf:about="https://w.atwiki.jp/mypad/pages/20.html">
    <title>ofxARToolkitPlus</title>
    <link>https://w.atwiki.jp/mypad/pages/20.html</link>
    <description>
      10.7,xcode4にしたら以下の方法で動かなくなったかた（自分）のためへの追記です。
↓
http://www43.atwiki.jp/mypad/pages/36.html
----
macOSXのXcodeの方むけの説明です。ちなみに実行環境は3.1。

ofxARToolkitPlusはopenframeworksのアドオン（プラグインのようなもの）で
openframeworks（描画機能）にARtoolkit（疑似空間）とOpenCV（カメラを目の代わりにするプログラム）をつないだものです。openframeworksのAddon（追加ライブラリみたいなもの）というやつです。基本的にofxARToolkitPlus.zipをダウンロードして展開したフォルダをいれれば動くんですが、Xcode使い慣れてないとディレクトリのパスとか、リンクの仕方で悩むと思います。

用意するもの
・openframeworks本体（of_preRelease_v0062_osxSL_FATなど）
・ofxARToolkitPlus（この中にexampleが入ってます）-&gt;[[ofxARToolkitPlus.zip&gt;http://interactivefabrication.com/misc/ofxARToolkitPlus.zip]]
http://interactivefabrication.com/misc/ofxARToolkitPlus.zip

これも参考になるかも
http://4u.jeffcrouse.info/of/ofxARToolkitPlus.zip

ディレクトリの置き場所
of_preRelease_v0062_osxSL_FATどこでも
of_preRelease_v0062_osxSL_FAT&gt;addons＞ofxARToolkitPlus
of_preRelease_v0062_osxSL_FAT&gt;Apps&gt;myApps（つくる）&gt;ARexample(もとはexample)

ARexampleの中の

ofxARToolkitPlusExample.xcodeproj

をXcodeで開いて実行（Xcode左上のコンパイラの選択がMacOS 10.5|Debugだとよいようです）

もし一発で通ったらOKだけど、通らなかったらリンクの設定が間違ってるかも。下記参照。

通ってもまだカメラが認識されないと思うので、

testApp.h
4行目くらいに
// Uncomment this to use a camera instead of a video file
#define CAMERA_CONNECTED

というのがありますね。このをコメントアウトをはずすと、コンパイラが「お、カメラ使うんだな」と理解してくれます。実行し直してみてください。

どうでしょう。

下に迷ったことを書いておきます。通れば読まなくてもいいです。

まず、簡便に動くExampleが少ないのが問題ですね。

[[ここ&gt;http://www.openframeworks.cc/forum/viewtopic.php?f=10&amp;t=743&amp;start=90]]で下の方に行って
#image(ofxAR.png,width=400)

なんか黄色い箱がのっている白黒の画像の下に赤い文字で

[[ARToolkitExample.zip&gt;http://interactivefabrication.com/misc/ofxARToolkitPlus.zip]]
をダウンロードしてね。
と書いてあるのでします。

ダウンロードしたofxARToolkitPlusの中にexampleというのがはいってますのでexampleをARexampleとかに改名してmyAppsとかいうディレクトリを作って入れておきましょう。

#image(example_pos.png,width=500)

ofxARToolkitPlusの中身を観察すると初心者なのでIDE（EclipseとかXcodeとかVBとか）の使い方がよくわからなくて四苦八苦し、Xcodeの使い方がわからずに数時間を無駄にします。

openframeworksのフォルダの中のaddonフォルダの中にofxARToolkitPlusを入れて、

青いもじで

../../../addons/ofxARToolkitPlus/include

参照場所をにパスを通せばいいということですか（違う）？

ちなみにこんなパスの位置で動いてます。
#image(path.png,width=400)
#ref(path.png,width=500)

[[ofxARToolkitPlus.zip&gt;http://4u.jeffcrouse.info/of/ofxARToolkitPlus.zip]]
ダウンロード展開して


左の窓に赤い文字で書かれたファイルがたくさんあったらXcodeがコンパイルに必要なフォルダを見つけられていないです。僕も詳しいことがわからないんですが。
そんな場合はcontrol+クリックで、「情報を見る」でパスの再設定などをすると大丈夫なときもあります。参考程度に。
#image(info.png)



すべてが通ったらUSBカメラをつないで

testApp.h
4行目くらいに
// Uncomment this to use a camera instead of a video file
#define CAMERA_CONNECTED

というのがありますね。これのコメントアウトはずすと、コンパイラが「お、カメラ使うんだな」と理解してくれます。

んで、プロジェクトを実行すればうごきます。


参考になるリンク：
http://oshiro.bpe.es.osaka-u.ac.jp/people/staff/imura/computer/OpenGL/artp/disp_content    </description>
    <dc:date>2012-11-14T04:49:03+09:00</dc:date>
    <utime>1352836143</utime>
  </item>
  </rdf:RDF>
