ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
コメントを書こうとしたらちょっと面白い事になりました。
多分大半の人は何が笑えるのかがわからないと思いますので分かる人だけ笑ってください。
僕もロッテファンじゃなかったら知らなかったと思います。
ARToolkitを使ったRTCはいくつかあるのですが、何と言うかどれも仕様が僕の考えているものと違う感じです。まあそれが仕様なので良いとか悪いとか言うつもりはないですが。
例えばこのRTCは何故か図形を合成した画像を出力しているようです。
今一どう使うのかがわかりません。
今年のRTMコンテストの作品にARToolkitを使ったRTCがあるようですが、ソースコードを読んだ感じCameraImage型のデータポートを使っていないように見えます。あとPanTiltAngles型で出力するのもあまり汎用性がないような印象です。
このRTCが理想に近いのですが、配布していないようです。
画像データを入力後マーカーの位置姿勢を出力するという単純なRTCが欲しいと思います。
ないなら作るしかないので、昨日から作り始めました。
とりあえずここでソースコードを配布しています。
とは言っても、個人で使うために作ったものなので出来は良くないです。
特別な理由がなければ前述したRTCを使った方が良いでしょう。
CameraImage型のInPortから画像データを読み込んでTimedPose3D型のOutPortから位置姿勢、TimedDoubleSeq型のOutPortから同次変換行列を出力します。
今の所ソースコードのみの配布です。
ビルドする手順を説明します。
まずはARToolkitPlusをダウンロードして解凍したフォルダをCドライブの直下にコピーしてください。そしてbuild/VC8.XPのARToolKitPlus.slnを開いてビルドしてください。するとlib/Win32フォルダにARToolKitPlus.libが生成されます。
それが終わったらここからダウンロードしたファイルを解凍してCMakeしてプロジェクトファイルを作成してください。先ほどARToolkitPlusのフォルダをCドライブ直下以外にコピーした場合はsrcフォルダのCMakeLists.txtを編集してください。
そしてartp.slnを開いてビルドするとsrc/Releaseフォルダに実行ファイルが生成できます。その後、ARToolkitPlus/sample/simpleフォルダのdataフォルダを先ほどのReleaseフォルダにコピーしてください。これでとりあえず動作できます。マーカーはARToolkitPlusのフォルダのid-markers内の画像を使用してください。コンフィギュレーションパラメータmarkerModeでSIMPLEを選択した場合はsimple/std-borderのフォルダ、BCHを選んだ場合はbchのフォルダの画像を検出できます。画像の番号はpatternIDで指定してください。
ただ、これでも不満な点が多いです。
この作品のソースコードが公開されたようなので感想を書きます。マニュアルは一体どこでしょうね?
それにしてもOpenCVを使った作品がやたら多い気がします。
画像処理は苦手、というか興味がないのでソースコードを読んでもよくわかりません。ロボットで一番興味のない分野がマシンビジョンと言っても過言ではないです。
それはさておきソースコードを読んでみます。
結構複雑ですね。予稿原稿を読んでみないとわからないかもしれないです。
とりあえずonExecuteでwhile文を使っていますが、読んでみた感じ長時間処理を止めてしまう可能性がありそうなのであまり好ましい仕様ではないと思います。長時間止めてしまったらエラーに遷移してくれないとRTシステムエディタなどによる操作ができなくなります。単純に複数のデータの到着を待ちたいのであれば全てのデータポートのisNew()関数でTrueにならない場合は何もせずに終了すれば良いだけだと思うのですが。
EstimateToe.hとCalculateToePosition.hの内容がほとんど同じにしか思えないのですが、もっと簡単にかけたかもしれません。
m_depthの点群から近似的に平面の方程式を求める(estimateFloor.Estimate_plane~)→各点のうち平面から離れている点を抽出する(separateFoot.SeparateFootFromFloor~)までは理解できたようなできてないような感じですが、estimateFoot.Execlabel~で何をしているのかがよくわかりません。どういう基準でラベル付けをしたのでしょうか?
あとcv::Point tipToePoint = calcToePosition.GetToePosition~もよくわかりません。
GetToePosition関数ではbasePointとの距離がm_minDistance以下の点の座標をtipToePointに入れて最終的にtipToePointをreturnしているようですが、m_minDistanceという変数は一度も変更されていません。つまり距離がどんな値になろうとfor文で最後にtipToePointに代入した座標がretrunされることになります。ちょっとよくわからないですね。
マニュアルがないのでソースコードを読んでみての推測ですが、おそらくKinectで地面と足しか検出できない状態で使用するのではないかと思います。
とりあえずマニュアルが公開されるのを待ちたいと思います。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
多分大半の人は何が笑えるのかがわからないと思いますので分かる人だけ笑ってください。
僕もロッテファンじゃなかったら知らなかったと思います。
ARToolkitを使ったRTCはいくつかあるのですが、何と言うかどれも仕様が僕の考えているものと違う感じです。まあそれが仕様なので良いとか悪いとか言うつもりはないですが。
例えばこのRTCは何故か図形を合成した画像を出力しているようです。
今一どう使うのかがわかりません。
今年のRTMコンテストの作品にARToolkitを使ったRTCがあるようですが、ソースコードを読んだ感じCameraImage型のデータポートを使っていないように見えます。あとPanTiltAngles型で出力するのもあまり汎用性がないような印象です。
このRTCが理想に近いのですが、配布していないようです。
画像データを入力後マーカーの位置姿勢を出力するという単純なRTCが欲しいと思います。
ないなら作るしかないので、昨日から作り始めました。
とりあえずここでソースコードを配布しています。
とは言っても、個人で使うために作ったものなので出来は良くないです。
特別な理由がなければ前述したRTCを使った方が良いでしょう。
CameraImage型のInPortから画像データを読み込んでTimedPose3D型のOutPortから位置姿勢、TimedDoubleSeq型のOutPortから同次変換行列を出力します。
今の所ソースコードのみの配布です。
ビルドする手順を説明します。
まずはARToolkitPlusをダウンロードして解凍したフォルダをCドライブの直下にコピーしてください。そしてbuild/VC8.XPのARToolKitPlus.slnを開いてビルドしてください。するとlib/Win32フォルダにARToolKitPlus.libが生成されます。
それが終わったらここからダウンロードしたファイルを解凍してCMakeしてプロジェクトファイルを作成してください。先ほどARToolkitPlusのフォルダをCドライブ直下以外にコピーした場合はsrcフォルダのCMakeLists.txtを編集してください。
そしてartp.slnを開いてビルドするとsrc/Releaseフォルダに実行ファイルが生成できます。その後、ARToolkitPlus/sample/simpleフォルダのdataフォルダを先ほどのReleaseフォルダにコピーしてください。これでとりあえず動作できます。マーカーはARToolkitPlusのフォルダのid-markers内の画像を使用してください。コンフィギュレーションパラメータmarkerModeでSIMPLEを選択した場合はsimple/std-borderのフォルダ、BCHを選んだ場合はbchのフォルダの画像を検出できます。画像の番号はpatternIDで指定してください。
ただ、これでも不満な点が多いです。
- 動作が分かりづらいので画像を表示するかコンフィギュレーションで選択できるようにした方が便利
- クォータニオンを出力できた方が計算量が減る場合もある
- ARToolKitPlus_2.1.1/id-markersフォルダにあるマーカーしか検出できないが独自のマーカーを検出できた方が便利
この作品のソースコードが公開されたようなので感想を書きます。マニュアルは一体どこでしょうね?
それにしてもOpenCVを使った作品がやたら多い気がします。
画像処理は苦手、というか興味がないのでソースコードを読んでもよくわかりません。ロボットで一番興味のない分野がマシンビジョンと言っても過言ではないです。
それはさておきソースコードを読んでみます。
結構複雑ですね。予稿原稿を読んでみないとわからないかもしれないです。
とりあえずonExecuteでwhile文を使っていますが、読んでみた感じ長時間処理を止めてしまう可能性がありそうなのであまり好ましい仕様ではないと思います。長時間止めてしまったらエラーに遷移してくれないとRTシステムエディタなどによる操作ができなくなります。単純に複数のデータの到着を待ちたいのであれば全てのデータポートのisNew()関数でTrueにならない場合は何もせずに終了すれば良いだけだと思うのですが。
EstimateToe.hとCalculateToePosition.hの内容がほとんど同じにしか思えないのですが、もっと簡単にかけたかもしれません。
m_depthの点群から近似的に平面の方程式を求める(estimateFloor.Estimate_plane~)→各点のうち平面から離れている点を抽出する(separateFoot.SeparateFootFromFloor~)までは理解できたようなできてないような感じですが、estimateFoot.Execlabel~で何をしているのかがよくわかりません。どういう基準でラベル付けをしたのでしょうか?
あとcv::Point tipToePoint = calcToePosition.GetToePosition~もよくわかりません。
GetToePosition関数ではbasePointとの距離がm_minDistance以下の点の座標をtipToePointに入れて最終的にtipToePointをreturnしているようですが、m_minDistanceという変数は一度も変更されていません。つまり距離がどんな値になろうとfor文で最後にtipToePointに代入した座標がretrunされることになります。ちょっとよくわからないですね。
マニュアルがないのでソースコードを読んでみての推測ですが、おそらくKinectで地面と足しか検出できない状態で使用するのではないかと思います。
とりあえずマニュアルが公開されるのを待ちたいと思います。
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR