本実施の形態では、複数のブロックを組み立てたり変形させたりし、その形状、姿勢、位置を情報処理の入力値として利用する。すなわちこのようなブロックを、情報処理装置に対する入力装置と位置づけることができる。さらに、情報処理装置が行った処理の結果を反映させるように、組み立てたブロックの形状、姿勢、位置を変化させる場合もある。この場合ブロックは、情報処理装置に対する出力装置と位置づけられる。ここで情報処理装置が行う処理は特に限定されないが、好適な態様を後に例示する。以後、このようなブロックのまとまり、またはそれを組み立てた物を総称して「ブロックセット」と呼ぶ。また後述するように、ブロックセットには服飾品を模した物や粘土細工など一般的な意味でのブロック以外の物体を含んでよく、その形状や材質は限定されない。以後、それらも含めて「ブロック」と呼ぶ。
図1は本実施の形態を適用できる情報処理システムの構成例を示す。情報処理システム2は、ブロックセット120、ブロックセット120を撮像するカメラ122、ブロックセット120を入力装置あるいは出力装置として所定の情報処理を行う情報処理装置10、情報処理装置10に対するユーザ操作を受け付ける入力装置14、情報処理装置が出力したデータを画像として表示する表示装置16を含む。
情報処理装置10は、たとえばゲーム装置やパーソナルコンピュータであってよく、必要なアプリケーションプログラムをロードすることで情報処理機能を実現してもよい。表示装置16は液晶ディスプレイ、プラズマディスプレイ、有機ELディスプレイなど一般的なディスプレイでよい。またそれらのディスプレイとスピーカを備えたテレビであってもよい。入力装置14は、ゲームコントローラ、キーボード、マウス、ジョイスティック、表示装置12の画面上に設けたタッチパッドなど、一般的な入力装置のいずれか、またはいずれかの組み合わせでよい。
情報処理装置10と、カメラ122、入力装置14、表示装置16との接続は、有線、無線を問わず、また種々のネットワークを介していてもよい。あるいはカメラ122、情報処理装置10、入力装置14、表示装置16のうちいずれか2つ以上、または全てが組み合わされて一体的に装備されていてもよい。また、カメラ122は必ずしも表示装置16の上に搭載されていなくてもよい。ブロックセット120は情報処理装置10で処理される内容によっては複数でもよい。ブロックセット120と情報処理装置10は、Bluetooth(ブルートゥース)(登録商標)プロトコルやIEEE802.11プロトコルなどを用いて無線接続を確立する。あるいはブロックセット120の一つのブロックと情報処理装置10を、ケーブルを介して接続してもよい。
本実施の形態のブロックセット120は上述のとおり、情報処理装置10に対する入力装置として用いる場合と、出力装置として用いる場合がある。つまり前者の場合、ユーザがブロックセット120の位置、姿勢、形状を変化させた結果を、情報処理装置10が入力値として用い情報処理を行い、表示装置16にその結果を画像として表示する。後者の場合、ユーザが入力装置14を操作することによって情報処理装置10が情報処理を行い、その結果としてブロックセット120自体を動かす。本実施の形態は、そのいずれのモードも実現可能として構成してもよいし、いずれか一方のみを実現可能として構成してもよい。
図2はブロックセットを構成する個々のブロックの外観例を示している。本実施の形態においてブロックは大きく2種類に分類される。一方は他のブロックや情報処理装置10と通信可能に構成されるブロック、他方は通信手段を持たないブロックである。以後、前者を「通信ブロック」、後者を「非通信ブロック」と呼ぶ。通信ブロックは、他のブロックとの通信機構のほか、ブロックの向き、角度、位置などの物理量を測定する各種センサを内蔵していてよい。
通信ブロック、非通信ブロックに関わらず、ブロックは図示するように、四角柱型ブロック102a、102b、102c、立方体型ブロック102d、円柱型ブロック102f、102k、球型ブロック102e、板状ブロック102i、直方体型ブロック102jなど様々な形状を有することができる。各ブロックには所定のサイズおよび形状を有する凸部104、凹部106を設け、凹部106に凸部104を差し込むことによりブロック同士を所望の位置で連結可能に構成する。あるいは直方体型ブロック102j、円柱型ブロック102kのように、他のブロック自体をはめ込める形状の凹部107等を設けることにより、他のブロックを包含可能に構成してもよい。
ブロックセットにはさらに、連結するブロックの間隔を調整するため、両端を異なるブロックの凹部106に差し込み可能なジョイント用ブロック102g、102hを含めてもよい。またジョイント用ブロックが回転するなどして接続するブロック間の位置・姿勢関係を変化させることができるようにしてもよい。
通信ブロックの凸部104および凹部106は、ブロック間の信号伝送を可能とする端子の役割も有する。そのため先端にはそれぞれ、ブロック内部に設けるバスなどの規格に応じた構造のコネクタを備える。一般的に普及している各種コネクタを採用したり、専用の特殊コネクタを設けたりすることにより、信号伝送とブロック同士の物理的な連結を同時に達成することができる。なお信号伝送の経路を別途用意するとともに、連結箇所を別途特定できれば、ブロック同士の接続手段は凸部104と凹部106の連結に限定されず、面ファスナー、磁石、接着テープ、接着剤などで実現してもよい。ここで別途用意する信号伝送の経路は、無線通信の機構でもよい。
また通信ブロックのうちあるブロック(図2の場合、四角柱型ブロック102b)は、2つのブロックと、それらを屈伸可能にする屈伸軸110と、ブロック同士がなす角度を検出するポテンショメータによって構成してよい。なお屈伸させる機構は、図示するように一方のブロックを貫通する屈伸軸110の両端に他方のブロックの突起を接合する形態のほか、ヒンジや屈伸可能な金属などによって2つのブロックを結合させた形態、球体関節人形における関節と同様の、複数自由度を有する機構などでもよく、特に限定されるものではない。ブロック同士の角度は連続的に変化可能としてもよいし、複数段階に変化可能としてもよい。また軸の向きは図示するものに限らない。
構成要素であるブロックの角度は、好適にはユーザが手を離しても維持されるような構造とする。なおブロック同士の角度はポテンショメータ以外の角度センサで計測してもよい。例えばブロック内部に他のブロックとの相対角を測定するセンサを搭載しておけば、ブロック同士は必ずしも接続されていなくてもよい。また後述するように1つのブロックを屈伸可能、回転可能に構成し、その屈伸角度、回転角を計測してもよい。
以後、このように角度を可変とするための機構を「関節」と呼び、関節の動きによって相対角が変化する2つのブロックを「リンク」と呼ぶことがある。さらに、このように関節を有する通信ブロックは、情報処理装置10からの要求によって関節角を制御可能としてもよい。この場合、当該通信ブロックには、サーボモータなど関節角を制御するためのアクチュエータを設ける。
また通信ブロックのうちあるブロック(図2の場合、板状ブロック102i)は、側面に突出した、自転可能な軸109を有していてよい。複数の軸109に車輪を装着することによりブロックを車のように移動させることができるようになる。当該移動やユーザがブロックを押すことによって実現してもよいし、情報処理装置10からの要求によって実現してもよい。後者の場合、当該通信ブロックには、軸を回転させるモーターなどのアクチュエータを設ける。軸109を車軸とする場合、車輪の向きを変化させるラック・アンド・ピニオンなどの機構を備えていてもよく、これも情報処理装置10からの要求に従いアクチュエータにより制御可能とする。
また通信ブロックのうちあるブロックの内部には、加速度センサ、ジャイロセンサ、地磁気センサなどや、カメラと対象物に取り付けたマーカーや形状そのものを利用して姿勢をトラッキングする手法などのモーションセンシング機能のうちの1つまたは複数の組み合わせを搭載する。センサを搭載するブロック、および搭載するセンサの種類や組み合わせは、ブロックセットを用いて実現する情報処理によって決定する。または様々なバリエーションのなかからユーザが組み立て時に選択する。
さらに通信ブロックのうちあるブロック(図2の場合、四角柱型ブロック102a)には、マーカー108を設けてもよい。マーカー108は、後述するカメラで撮影した画像における位置および大きさから、3次元空間での位置を特定するためのものである。したがってマッチング処理などによって撮影画像から検出できる大きさ、形状、色を有して形成される。例えば、光透過性を有する球形の樹脂の内部に発光ダイオードや電球など一般的な発光体を備えた球体や、バーコード、2次元コードなどでもよい。複数のブロックにマーカー108を設ける場合は、ブロックごとにその色を変えてもよい。
通信ブロックの外殻や非通信ブロックは、代表的には合成樹脂で形成するが、金属やガラスなどその材料は限定されない。特に非通信ブロックは通信機構等を内蔵しないため、その素材、形状、サイズは自由に決定できる。例えば布で作成した衣装やゴムで作成した人形の頭部などの各種パーツでもよいし、武器やアクセサリなど付加的な物でもよい。ユーザが自作したものでもよい。例えば消しゴムを削ってなる立体や、粘土細工、紙工作の作品、折り紙作品などでもよい。また通信ブロックからの通電によって所定色に発光するLEDや画像を表示する表示装置を備えたブロックなどでもよい。
本実施の形態の情報処理装置10は、通信ブロックとの通信により取得できるブロックセットの骨格形状、姿勢などの情報と、カメラ122が撮影した外観形状の情報とを相補間的に用いてブロックの状態を高精度に特定する。そのためブロックセットの外観は、非通信ブロックを用いて自由に表現できる。例えば図2の直方体型ブロック102j、円柱型ブロック102kのように、通信ブロックを包含する形状を有するブロックを非通信ブロックとして実現してもよい。
図3は、図1で示したブロックセット120のうち、通信ブロックの構造のみを示している。つまり同図のブロックセット120aは、図1のブロックセット120から非通信ブロックである直方体型ブロック102j、円柱型ブロック102kを除いたものであり、図2で示した四角柱型ブロック102a、102b、立方体型ブロック102d、およびジョイント用ブロック102hによって構成される。このうち四角柱型ブロック102bの下部のブロック、および立方体型ブロック102dは、図1のブロックセット120において、非通信ブロックである直方体型ブロック102jおよび円柱型ブロック102kにそれぞれ内包されており外部からは見えない。このような通信ブロックからなる構造体は、ブロックセット120全体の骨格を構成しているとも捉えられる。以後、組み立てられたブロックセット120のうち通信ブロックからなる部分を「コア」と呼ぶ。
本実施の形態では、コアを構成する通信ブロックに備えたモーションセンサ、ポテンショメータによって必要なパラメータを検出することにより、ブロックセット120の姿勢および形状を効率的に算出する。例えば図3のブロックセット120aの場合、(1)各ブロックの連結位置およびブロックの種類、(2)四角柱型ブロック102aまたは102bの傾きベクトルm1、(3)四角柱型ブロック102bを構成する2つのブロックの角度θ、(4)各ブロックの長さL1、L2、L3、L4、L5によって、各ブロックの向き、ひいてはブロックセット120の中心軸の形状および姿勢を導出できる。
上記(1)および(4)はブロック間の信号伝送により判明し、上記(3)はポテンショメータにより計測できるとすると、上記(2)を計測するために、四角柱型ブロック102aまたは102bにモーションセンサが内蔵してあれば必要十分となる。あるいは内蔵されたブロックを四角柱型ブロック102aまたは102bとして選択すればよい。
さらに実世界の3次元空間におけるブロックセットの位置座標は、カメラ122による撮影画像を利用して特定する。ここでカメラ122をステレオカメラとすることにより、カメラ122に対する奥行き方向とカメラの視野平面で構成される3次元空間におけるブロックセットの絶対位置を取得できる。ステレオカメラが左右の異なる視点から撮影した画像における視差を利用して、三角測量の原理によって対象物の3次元空間での位置を取得する技術は広く知られている。ステレオカメラに代えて、両眼立体視以外の、奥行きや3次元情報取得手段を利用してもよい。例えば、視点移動カメラを用いてもよいし、赤外線照射機構とその反射光を検出する赤外線センサを用い、TOF(Time Of Flight)の手法によってブロックセットの位置を特定してもよい。ブロックセット120を置く台の上面にタッチパネルを設け、それにより置かれた位置を検出してもよい。
あるいは図示するように、マーカー108を備えた四角柱型ブロック102aを用いることにより、単眼のカメラ122で撮影した静止画や動画のフレーム画像に基づき位置を特定してもよい。上述のようにマーカー108を既知の色、輝度、大きさを有する発光体とすると、撮影画像からマーカーの像を容易に検出できる。そして当該マーカーの像の画像上の位置および大きさから、3次元空間でのマーカーの位置座標(x1,y1,z1)を特定できる。それ以外のマーカーを採用する場合も、パターンマッチングや特徴点抽出など、一般的な画像認識技術を適用できる。ブロックセット120を動かし、それを動画像として撮影する場合は、既存のトラッキング技術を適用することにより効率的な検出が行える。
なおマーカー108を赤外線などの不可視光線を発光する装置としてもよい。この場合、不可視光線を検出する装置を別途導入し、マーカー108の位置を検出する。同様に、深度センサ、超音波センサ、音センサなどを利用してもよい。以上述べた絶対位置検出手法のいずれか2つ以上を組み合わせて最終的な位置座標を算出してもよい。図4はそのようにして導出した、コアの中心軸を模式的に示している。図示するように中心軸124は、3次元空間においてその位置、姿勢および形状が特定される。当該3次元空間はカメラ122のカメラ座標系でもよいし、それを所望の座標系に変換したものでもよい。以後、コアやブロックセットの位置、姿勢および形状を総称して「状態」と呼ぶことがある。
図5は通信ブロックの内部構成例を模式的に示している。上述のとおりブロックの内部構成に様々なバリエーションを持たせることにより、用途に応じた使い分けが可能になる。またコアの状態を特定するのに必要と想定されるセンサを複数のブロックに分散させて装備することにより、過度なセンサ搭載を避けることができ、製造コストを抑えることができる。
図5の例でブロック126aはバッテリー128a、通信機構130a、メモリ132a、位置センサ134、モーションセンサ136aを備える。ここで通信機構130aは、他のブロックからの信号を、接続端子を介して受信する有線通信機構のほか、情報処理装置10との無線通信を行う機構も含むものとする。メモリ132aは、ブロック126aの識別番号を保持する。当該識別番号は情報処理装置10においてブロック126aのサイズ、凹部、凸部の位置などの情報と対応づけられるものであり、同じ種類のブロックには同じ識別番号を付与してよい。あるいは組み立てられたブロックセット内での信号伝送のルーティングなどに利用できるようにブロックごとに一意に定めてもよい。
位置センサ134はブロック126aの絶対位置を取得するためのセンサであり、画像認識用のマーカーもこれに含まれる。ただしマーカーの場合は上述のとおり外部に設置したカメラ122との組み合わせによって絶対位置を検出する。モーションセンサ136aは上述のとおり、加速度センサ、ジャイロセンサ、地磁気センサのいずれか、またはいずれか2つ以上の組み合わせやカメラを利用した手法などとする。
ブロック126bは、バッテリー128b、通信機構130b、メモリ132b、モーションセンサ136bを備える。各機構はブロック126aについて上述したのと同様でよいが、通信機構130bは、他のブロックからの信号を受信する有線通信機構のみで構成してもよい。このようなブロックは、情報処理装置10との通信が可能なブロック126aと組み合わせて使用する。その他のブロックの通信機構も同様である。
ブロック126cは、バッテリー128c、通信機構130c、メモリ132c、角度センサ138、アクチュエータ139aを備える。ブロック126cは図2の四角柱型ブロック102bのように関節を有する通信ブロックであり、角度センサ138は、ポテンショメータなど関節角を検出するセンサである。アクチュエータ139aは情報処理装置10からの制御信号により関節角を変化させる。制御信号によるアクチュエータの駆動には、アクチュエータの種類に応じた一般的な技術を採用できる。
ブロック126dは、バッテリー128d、通信機構130d、メモリ132d、ロータリーエンコーダ141、アクチュエータ139bを備える。ブロック126dは図2の板状ブロック102iのように、外部に突出した回転可能な軸を有する通信ブロックであり、車輪を装着することによりブロック126d自体を手動や自動で推進させることができる。あるいはあらかじめ軸と車輪を一体的に備えていてもよい。
ロータリーエンコーダ141は車輪の回転量を検出するセンサである。アクチュエータ139bは情報処理装置10からの制御信号により車輪を回転させるモーターなどである。ブロック126eは通信機構130e、メモリ132eを備える。すなわちブロック126eは、バッテリーやセンサを備えないブロックである。そのためバッテリーを搭載した他のブロック126a、126bと組み合わせて使用する。
なお図5の通信ブロックは一例に過ぎず、各種センサやその他の機構をいかに組み合わせてもよい。例えばブロックセットが動く部分として、関節や車軸のみならず、操舵方向を変化させたり、一部のブロックを変位させたりする機構を備えていてもよい。これらの機構は、情報処理装置10からの制御信号によって駆動するアクチュエータにより動くようにしてもよい。またLEDや表示装置を備えていてもよい。接続した非通信ブロックに対する通電を行う機構を備えていてもよい。さらに、図示したセンサのほか、実用化されているいかなるセンサを内蔵してもよい。
このような様々な内部構成を有する通信ブロックを、図2で示したような様々な形状で準備する。同じ種類のブロックを複数準備してもよい。あるいは全てのブロックの形状およびサイズを統一してもよいし、内部構成を統一してもよい。形状や内部構成にバリエーションをもたせ、各種ブロックを個別に購入できるようにすると、個々のユーザの用途に合わせて最低限の費用で臨機応変に好みのブロックセットを組み立てることができる。基本的な組み立てが可能なブロックのセットをまず提供し、後から買い足せるようにしてもよい。
図6はブロックセット120と情報処理装置10の構成を詳細に示している。図6において、さまざまな処理を行う機能ブロックとして記載される各要素は、ハードウェア的には、CPU(Central Processing Unit)、メモリ、その他のLSIで構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。また既述したように、ブロックセット120の各ブロックは通信機構、メモリ、各種センサ、アクチュエータによって構成されている。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。
ブロックセット120は上述のとおり、個々のブロックをユーザが選んで組み立てることによって形成される。図6では組み立てられたブロックセットのうち、コアの部分の機能ブロックを示しており、それを構成する通信ブロックを第1ブロック142a、第2ブロック142b、第3ブロック142c、・・・などとしている。情報の錯綜を防ぐため、ブロックセット120を構成する通信ブロックのうち、情報処理装置10との通信を確立するブロックは、基本的には1つのみとする。そのため第1ブロック142aにハブの役割を与える。そして、当該第1ブロック142aから接続関係の遠い通信ブロックから情報を伝達し、第1ブロック142aにコア全体の情報を集約させる。
以下、ブロックの連結において第1ブロック142aに相対的に近いブロックを「上位」、遠いブロックを「下位」とする。第1ブロック142aとなるブロックはあらかじめ1つに定めておいてもよいし、情報処理装置10との通信機構を有するブロックに図示しないスイッチなどを設け、ユーザがオンにしたブロックを第1ブロック142aとしてもよい。または組み立て段階において情報処理装置10と最初に通信を確立したブロックを第1ブロック142aとしてもよい。
このようにして決定した第1ブロック142aに、ユーザが別の通信ブロックを連結すると、当該ブロックは第2ブロック142bとなる。第2ブロック142bにさらに別の通信ブロックを連結すると、当該ブロックは第3ブロック142cとなる。なお同図では3つの通信ブロックのみを示しているが、コアを構成する通信ブロックの数は限定されず、1つ、あるいは4つ以上でも、構成および動作は同様に考えることができる。
第1ブロック142a、第2ブロック142b、第3ブロック142cはそれぞれ、第1通信部143a、143b、143c、要素情報取得部144a、144b、144c、第2通信部146a、146b、146cを備える。第2ブロック142bはさらに、駆動部148を備える。ただし駆動部148はその他のいずれの通信ブロックに備えられていてもよい。第1通信部143a、143b、143cは、直接接続された下位のブロックから送信された情報を受信する。ここで受信する情報は、当該ブロックより下位に接続されているブロックの識別番号、連結箇所の識別番号、内蔵するセンサによる計測結果を含む。複数のブロックが連結されている場合は、最下位のブロックからブロックを通過するごとに情報が重畳される。
要素情報取得部144a、144b、144cは、当該ブロックが内蔵しているセンサおよび、他のブロックを接続する箇所に設けた端子を含み、センサの計測結果、および下位のブロックが接続している箇所に係る情報を取得する。第2通信部146a、146b、146cは、第1通信部143a、143b、143cが受信した、それより下位のブロックの識別番号、連結箇所の識別番号、内蔵するセンサによる計測結果を含む情報に、当該ブロックの要素情報取得部144a、144b、144cが取得した情報を追加し、直接接続された上位のブロックに信号として送信する。ただし第1ブロック142aの第2通信部146aは、当該情報を情報処理装置10に送信する。さらに第2通信部146aは、処理の開始、終了の要求信号、通信の確立に必要な各種信号や、ブロックセットのアクチュエータを駆動させるための制御信号を情報処理装置10から受信するなど、情報処理装置10とのインターフェースとして機能する。
情報処理装置10からアクチュエータを駆動させる制御信号が送信された場合、当該信号は第1ブロック142aから下位のブロックへ順次転送される。つまり各ブロックの第1通信部143a、143b、143cは、直接接続された下位のブロックへ当該信号を送信する。各ブロックの第2通信部146b、146cは、直接接続された上位のブロックから当該信号を受信する。第2ブロック142bの駆動部148は関節角を変化させたり車軸を回転させたりするアクチュエータを含み、第2ブロック142bが、上位のブロックから送信された制御信号において駆動対象として指定されている場合、それに応じた量でアクチュエータを動かす。
情報処理装置10は、ブロックセット120の第1ブロック142aからコアの状態に係る情報を受信するコア情報受信部20、カメラ122が撮影した画像とコアの状態に係る情報に基づきブロックセット120の形状、姿勢、位置を特定する構造解析部22、ブロックセット120の形状、姿勢、位置、あるいは入力装置14に対するユーザ操作に応じて所定の情報処理を行う情報処理部30、情報処理の結果、表示すべき画像を生成し表示装置16に出力する表示処理部32、ブロックセット120の動作を制御する信号を送信する駆動制御部34を含む。情報処理装置10はさらに、個々のブロックに係る情報を格納するブロック情報記憶部24、表示装置16に表示すべき3Dオブジェクトのモデルデータを格納するモデルデータ記憶部26、ブロックセットと3Dオブジェクトの部位や動きの対応情報を記憶する対応情報記憶部28を含む。
コア情報受信部20は、ブロックセット120の第1ブロック142aが集約した、コアを構成する通信ブロックの識別番号、その連結箇所、内蔵されたセンサによる計測結果に係る情報を含む信号を受信する。構造解析部22はカメラ122から、ブロックセット120を撮影した動画像や静止画像のデータを取得する。そして、コア情報受信部20が受信した情報と撮影画像から得られる情報とを統合し、ブロックセット120全体の位置、姿勢、形状を特定する。ブロックセット120からの信号とカメラ122からの画像データは即時入力されるため、時間的な対応がとれているものとするが、必要な時間分解能によっては同期化処理などを行ってもよい。
構造解析部22はブロックセット120のうち、コアの形状および姿勢はコア情報受信部20からの情報によって特定する。例えば、コアを構成する通信ブロックの識別番号に基づき、図3のL1〜L5の情報を導出する。さらに実際の連結箇所の識別番号、および角度センサの情報から連結位置、およびブロック同士のなす角度を特定する。さらにモーションセンサの情報から図3のベクトルm1を導出する。ブロックセット120の3次元空間における位置や非通信ブロックを含むブロックセット120の表面的な形状に係る情報は、カメラ122から送信された撮影画像や、撮影画像から生成した奥行き画像などに基づき特定する。
このとき、例えば図3のマーカー108など、コアに含まれる通信ブロックの像を画像から検出し、そこを基準部位とするとともに、奥行き画像などからその位置を導出する。そして図4の中心軸124のように、当該基準部位からつながるコアの構造と、基準部位の像に対する非通信ブロックの像の位置関係から、コアと非通信ブロックの位置関係、ひいてはブロックセット全体の位置、姿勢、形状を特定できる。この処理を所定の頻度で行うことにより、ユーザが組み立て途中にあるブロックセットであっても、その構造をリアルタイムに認識できる。
ブロック情報記憶部24には、ブロックセットとして用いる各ブロックの基本情報を格納する。通信ブロックの場合、基本情報とは、ブロックにあらかじめ付与される識別番号と、形状、サイズ、他のブロックを接続可能な箇所に係る情報とを対応づけた情報である。非通信ブロックの場合、ブロックにあらかじめ付与される識別番号と、色、模様、素材、テクスチャなど外観上の特徴を対応づけた情報である。非通信ブロックの場合、このような外観上の特徴が詳細なほど、ブロックの特定精度が向上する。ただし情報処理装置10が行う情報処理によって、個々の非通信ブロックを特定する必要がない場合は、非通信ブロックの情報は格納しなくてもよい。
情報処理部30は、構造解析部22が特定したブロックセット120の状態、あるいは入力装置14を介したユーザ操作に応じてなすべき処理を実行する。例えばブロックセット120が組み立てられたら、ブロックセットの形状を表す3Dオブジェクトやそれに対応づけられたモデルの3Dオブジェクトが表示されるようにする。そしてブロックセット120の動きに合わせて、表示された3Dオブジェクトが動くようにする。あるいはコンピュータゲームを起動して入力装置14を介したユーザ操作に応じて進捗させ、それに応じてブロックセット120を動かす。
このためモデルデータ記憶部26には、情報処理部30が表示装置16に表示させるオブジェクトモデルを描画するのに必要なデータを格納する。このオブジェクトモデルは、ゲームに登場するキャラクタなど、あらかじめデザインされたものでもよいし、組み立てたブロックセットに合わせてユーザが作成したものでもよい。情報処理部30はさらに、関節や車輪などブロックセットとオブジェクトの部位同士を対応づけ、さらに両者の部位の動きを対応づけるための処理を行う。このとき、情報処理部30が全ての対応を設定してもよいし、ユーザが対応づけられるように設定画面を表示して設定入力を受け付けてもよい。あるいはそれらを適宜組み合わせてもよい。対応情報記憶部28には、このようにして設定された、部位や動きの対応関係に係る情報を格納する。
これにより、ユーザがブロックセットを自由に作成しても、その位置のみならず形状や姿勢までを、ブロックセットと画面上のオブジェクトで連動させることができる。例えばゲームの世界を実世界におけるブロックセットに反映させたり、ブロックセットの動きを仮想世界にいるキャラクタに反映させたりすることが可能となる。このとき、必ずしも両者の動きが完全に同一でなくてもよく、動きの対応づけによって様々な変化を設定できるようにする。また動きの反映はリアルタイムでなくてもよい。例えばユーザが動かしたブロックセットの状態の経時変化を保存しておくことにより、任意のタイミングで、対応するオブジェクトが動きを再現する態様を実現できる。ひいては、コンピュータゲームやアニメーションのキャラクタの動きを容易な操作で作成できる。
駆動制御部34は、情報処理装置10がブロックセット120を動かす態様において、情報処理部30からの要求に従いブロックセット120に制御信号を送信する。具体的に送信する信号は制御方式によって様々であり、ロボット工学の分野などで一般的に用いられる技術を適宜採用してよい。送信された制御信号はブロックセット120における第1ブロック142aの第2通信部146aで受信され、ブロックセット120内部での信号伝送により対象ブロック(図6の場合は第2ブロック142b)の駆動部148の動作へ反映される。あるいは当該制御信号を、無線通信などにより対象ブロックへ直接送信するようにしてもよい。
表示処理部32は、情報処理部30が行った処理の結果として画像データを作成し、表示装置16に表示させる。ブロックセット120の動きに合わせて動くオブジェクトを表示させる例では、表示装置16の出力フレームレートで、ブロックセット120の動きに対応させてオブジェクトを描画し、表示装置16にビデオ信号として出力する。描画処理自体は一般的なコンピュータグラフィックス技術を適用できる。表示処理部32はさらに、ブロックセット120とオブジェクトの部位や動きの対応づけを設定するための画面を表示装置16に表示させる。情報処理部30が全ての対応づけを行う場合は、設定した対応をユーザが確認したり修正したりする画面を表示させてもよい。表示処理部32はそのほか、ゲーム画面など情報処理部30が実行している情報処理に応じた画像を適宜表示させる。
図7はブロックセット120における情報伝達経路と伝達される情報の例を模式的に示している。情報伝達経路150において内部に数字の書かれた円はそれぞれがブロックを表しており、円間の直線はブロックが連結されている状態を表している。また円内の数字は各ブロックの識別番号とする。識別番号「1」のブロックは図6の第1ブロック142aに対応し、情報処理装置10と通信を確立する。さらに図7における識別番号「2」、「3」のブロックは識別番号1のブロックに直列に接続されていることから、図6における第2ブロック142b、第3ブロック142cにそれぞれ対応すると捉えることができる。
一方、1つのブロックに複数のブロックが連結することも考えられる。図7の例では識別番号「1」のブロックに識別番号「2」のブロック、「5」のブロックが接続されている。識別番号「2」のブロックには上述のとおり、識別番号「3」のブロック、「4」のブロックがこの順で直列に接続されている。識別番号「5」のブロックには、識別番号「6」のブロックと「7」のブロックが並列に接続されている。この例ではさらに、識別番号「6」のブロックに、識別番号を持たないブロックが接続され、そのブロックに識別番号「8」のブロックが接続されている。ここで識別番号を持たないブロックとは、非通信ブロックに相当する。
上述のとおり情報伝達は基本的に、下位のブロックから上位のブロックへ伝達される。図7では、伝達される情報の内容を、伝達方向を示す矢印とともに表している。例えば識別番号「3」のブロックから「2」のブロックへ伝達される情報は、[3:J2(4)]と示されている。これは「自らの識別番号:ブロックに設けられた接続箇所の識別番号(そこに接続しているブロックの識別番号)」なるフォーマットで構成される信号であり、識別番号「3」の接続箇所のうち識別番号「J2」の箇所に識別番号「4」のブロックが接続されていることを表している。ただし同図をもって情報のフォーマットや内容を限定するものではない。
ブロックの上位にあたる方向がどちらにあるかは、ハブの役割を有するブロックが、ブロックの連結によって構成されるネットワークを探索することにより、順位づけを行うなどして決定できる。このような手順は、一般的な情報処理システムを構成するデバイスツリーにおけるネットワーキング技術を適用できる。
図7において識別番号「4」のブロックは、それが属する接続系列において最下位にあるため、1つ上位の識別番号「3」のブロックへ情報を送信する。識別番号「4」のブロックには他のブロックが接続されておらず接続箇所が一意に求まるとすると、またセンサが内蔵されていないとすると、送信される情報は自らの識別番号「4」のみとなるため、伝達内容を「[4:−]」と表している。「−」はセンサの計測結果や接続されているブロックがないことを示している。
識別番号「3」のブロックは、識別番号「4」からの信号を受信すると、それを受信した端子の番号などを接続箇所の識別番号として対応づけ、さらに自らの識別番号「3」も対応づけて、1つ上位の識別番号「2」のブロックに送信する。この信号の伝達内容は上述のとおり[3:J2(4)]となる。識別番号「2」のブロックも同様に、自らの識別番号、接続箇所の識別番号(図の例では「J5」)、接続しているブロックの識別番号「3」を対応づけた信号、すなわち[2:J5(3)]を生成する。また識別番号「2」のブロックがセンサを内蔵しているとすると、その計測結果を表す信号と自らの識別番号を対応づけた信号も生成する。同図の例では計測結果を「result」と表しているが、実際には具体的な数値がセンサの種類に応じて代入される。
識別番号「2」のブロックは、このようにして生成したデータと、下位のブロックから伝達されたデータ、すなわち[3:J2(4)]を、1つ上位の識別番号「1」のブロックに送信する。ただしこれらの信号は常に同時に送信する必要はなく、一旦送信した信号の内容に変更があったときにその情報のみを送信するなどでもよい。一方、識別番号「5」のブロックに接続された、識別番号「6」と「7」のブロックがセンサを内蔵しておらず接続箇所が一意に求まるとすると、これらのブロックからは、識別番号「4」のブロックと同様、[6:−]、[7:−]の信号がそれぞれ識別番号「5」のブロックに送信される。識別番号「6」のブロックには、さらに別のブロックが接続されているが、当該ブロックは非通信ブロックのため、そこからの情報は得られないものとしている。
識別番号「5」のブロックは、自らの識別番号に、接続箇所の識別番号および接続されているブロックの識別番号を対応付けた信号を生成し、1つ上位の識別番号「1」のブロックに送信する。図示するように複数のブロックが接続されている場合、それらをまとめて[5:J3(6),J8(7)]などとする。ここで「J3」、「J8」は、かっこ内の識別番号のブロックが接続されている接続箇所の識別番号である。
このようにして識別番号「1」のブロックに、ブロックセットのコアの情報が集約される。識別番号「1」のブロックも他のブロックと同様、自らの識別番号に接続箇所の識別番号、それに接続されているブロックの識別番号を対応づけた信号を生成する。そして下位のブロックから送信された信号とともに情報処理装置10へ送信する。これにより情報処理装置10は、コアを構成するブロックの識別番号、各ブロックの接続関係、センサを内蔵するブロックにおける計測結果を逐次取得することができる。
このように、ハブの役割を有するブロックを1つに定め、情報を集約させて情報処理装置10へ送信するようにすると、情報の錯綜や無駄な通信処理を防止することができる。一方、場合によっては複数のブロックから情報処理装置10へ通信するようにしてもよい。例えば図7の例では、識別番号「8」のブロックは、非通信ブロックを介して識別番号「6」のブロックに連結している。
この場合、識別番号「8」のブロックは、自らのデータを情報処理装置10へ直接送信してもよい。例えば当該ブロックが位置センサを内蔵する場合、自らの識別番号とその計測結果を直接、情報処理装置10へ送信することにより、情報処理装置10は、識別番号「6」のブロックより先に連結しているブロックが存在することを把握でき、さらに当該ブロックの形状、およびおよその接続状況を推測することができる。識別番号「8」のブロックに内蔵されるセンサの数が増えるほど、その情報の確度が向上する。複数の位置情報を取得できるブロックを組み合わせることで、カメラ122からの死角にあるブロックの構造も精度よく特定できる。
図8は情報処理装置10のブロック情報記憶部24に格納する、通信ブロックの基本情報のデータ構造例を示している。通信ブロック情報テーブル160は、識別番号欄162、形状欄164、サイズ欄166、接続箇所欄168を含む。識別番号欄162には、ブロックセットを構成する通信ブロックにあらかじめ付与した識別番号を記載する。形状欄164には、各通信ブロックの形状の種類、すなわち「四角柱」、「立方体」など、図2で例示したようなブロックの型を記載する。サイズ欄166には各通信ブロックの横幅、奥行き、縦の長さを記載する。
接続箇所欄168には、各通信ブロックに設けられた接続箇所を、その識別番号と対応づけて記載する。図8の例では、「接続箇所の識別番号(面の番号,当該面内でのx座標,y座標)」なるフォーマットで記載されている。面の番号は、ブロックの各面に対しあらかじめ一意に決定しておく。例えば識別番号「1」の通信ブロックは、横幅4cm、奥行き4cm、縦の長さ8cmの四角柱型ブロックである。そして識別番号が「J1」の接続箇所は、第1面の座標(2,2)の位置にある。識別番号が「J2」の接続箇所は、第2面の座標(1,2)の位置にある。ただしこれらの情報が表されれば、その表記のフォーマットは特に限定されない。
このような通信ブロック情報テーブル160を情報処理装置10で保持しておくことにより、ブロックセット120から送信された信号に基づき、コアに対し図3で表記したようなパラメータが判明することになる。構造解析部22は、このようにして特定されるコアの状態と、カメラ122が撮影した画像に基づき、非通信ブロックを含むブロックセット120全体の位置、姿勢、形状を特定する。図9は非通信ブロックを含むブロックセットの状態を特定する基本的な処理を説明するための図である。同図左上はコア情報受信部20が受信した情報に基づき特定されるコア170の状態を示している。この情報から特定されるのは、通信ブロックの接続関係とそれに基づくコアの形状である。ただし内部に位置センサを備えていれば、実空間での位置も判明する。
一方、構造解析部22は、カメラ122が撮影した画像から奥行き画像172を生成する。奥行き画像はカメラ122の視野内の対象物を、カメラからの距離を画素値として表した画像であり、上述のとおりカメラ122をステレオカメラなどとすることにより作成できる。同図の奥行き画像172は、距離が遠いほど輝度が小さい画像を模式的に示しており、通信ブロック、非通信ブロックの区別なく、ブロックセット120全体の像が表れている。この奥行き画像のうち、例えばマーカーなどコアに属するブロックの少なくとも一部の像を検出することにより、当該部分のカメラからの距離を含む3次元空間での位置座標を特定できる。そして先に特定したコア170の状態のうち、画像上で検出された部位が当該位置座標に存在するようにして、コア170に対するカメラ座標系を定める。
なおコアの像を検出する際は、カメラ122が撮影したカラー画像を利用してもよい。そしてカメラ122側から見たコア170と、奥行き画像172の像として表れるブロックセットとのボリューム差分をとることにより、ブロックセットのうちコアの部分を除いた非通信ブロックの状態を特定できる。図9の右に示したブロックセット120のうち、網掛けで示した部分が差分として得られた非通信ブロックである。結果として、図示するように、コアと非通信ブロックとを含むブロックセット120全体の位置、姿勢、形状を特定できる。なお背景分離などによりブロックセット120の像が特定でき、コアの見かけ上の大きさなどに基づき当該像とコアの位置合わせが可能であれば、奥行き画像によらず、一般的な撮影画像のみを利用してもよい。
なお図9で示した基本的な処理では、非通信ブロックについて得られる情報は、カメラの視野平面における2次元の情報のみである。そこで、非通信ブロックの基本情報をブロック情報記憶部24に格納しておき、視野平面での見かけの形状やサイズに合致するブロックを検索することにより、奥行き方向を含む3次元形状の特定精度を上げることができる。図10は情報処理装置10のブロック情報記憶部24に格納する非通信ブロックの基本情報のデータ構造例を示している。
非通信ブロック情報テーブル180は、識別番号欄182、形状欄184、サイズ欄186、色欄188を含む。識別番号欄182には、ブロックセットを構成する非通信ブロックにあらかじめ付与した識別番号を記載する。同じ形状、サイズ、色のブロックは同じ識別番号としてもよい。形状欄184には、各非通信ブロックの形状の種類、すなわち「直方体」、「円柱」など、図2で例示したようなブロックの型を記載する。サイズ欄186には各非通信ブロックの横幅および奥行き(あるいは直径)、縦の長さを記載する。色欄188には、各非通信ブロックの色を記載する。
形状欄184、サイズ欄186、色欄188の情報は、3Dグラフィックスにおけるオブジェクトモデルのデータと同様に、ポリゴンやテクスチャなどの情報としてもよい。また非通信ブロック情報テーブル180が保持する情報は図示するものに限らない。例えば凹部の形状などから、接続できる通信ブロックが限定的である場合は、接続可能な通信ブロックの識別番号を保持しておけば、特定済みのコアに属する通信ブロックに基づき、それに接続されている非通信ブロックを絞り込める。構造解析部22は非通信ブロック情報テーブル180を参照し、図9で示した奥行き画像172のうちコア以外の部分の像にそれぞれ合致する非通信ブロックを特定する。
なお他のブロックに隠蔽されて見えないブロックについては、初期状態では存在しないと仮定したうえでブロックセットの動きを追跡していくことで、時間発展的に正確な形状を特定していく。一部が隠蔽されている場合で、非通信ブロック情報テーブル180を参照しても形状が確定できない場合は、いずれかの候補形状を仮定するか、隠蔽部分のみ何らかの面を仮定することにより、後の時間で徐々に修正していき形状認識の精度を上げていく。
図11は時間発展的にブロックセットの形状を特定する処理を説明するための図である。同図の縦軸は時間を表し、時刻「T1」から「T2」へ時間が経過しているとする。またブロックセット190は一例として、同図最上段に示すように、マーカーのついた四角柱型の通信ブロック(白抜きで表示)の下半分に円柱型の非通信ブロック(網掛けで表示)が装着されている。まず時刻T1においては当該図のように、水平面に置かれたブロックセット190を、カメラ122が正面から撮影したとする。この場合、撮影画像192aでは図示するように、各ブロックの側面のみが像として表れる。
このような画像から上述のとおり奥行き画像を生成し、別途形状を特定したコアとのボリューム差分をとると、残りの部分は見かけ上、非通信ブロックの側面の像である四角形となる(奥行き画像198a)。すなわち時刻T1では、非通信ブロックの3次元形状が特定できない可能性がある。ただし奥行き画像の分解能によっては円柱か直方体か、といった区別が前面の湾曲の有無によって判明する場合もある。また非通信ブロック情報テーブル180に登録済みのブロックのうち、サイズやアスペクト比などが合致する非通信ブロックが一つのみの場合も、その形状を特定できる。なお奥行き画像198aは、撮影画像から取得した奥行き画像中のブロックセットの像とコアとのボリューム差分をとったボリュームデータを表象するものであり、必ずしも画像として生成するものではない。以後の図も同様である。
それ以外の場合、構造解析部22は、非通信ブロック情報テーブル180から候補となる非通信ブロックを検出し、そのいずれかであることを仮定する。あるいは、形状が特定されている通信ブロックと同一平面を非通信ブロックの不特定の面として仮定する。同図では前者の例として、非通信ブロックを直方体と仮定した場合のブロックセットの形状200を示している。なお図示するブロックセットの形状200は、情報処理装置10において時刻T1の時点で認識されている形状であり、必ずしもそれを表示に用いる趣旨ではない。例えば、ブロックセットの状態をそのまま3Dオブジェクトとして表示するアプリケーションを実行中は、図示した仮定形状のまま描画してもよい。あるいは何らの表示も行わず、次の時間ステップにおいて形状を修正する際の土台として用いるのみでもよい。
表示を行うか否かに関わらず、非通信ブロックの形状を時間発展的に特定したり、ユーザが組み立て中のブロックセットの形状変化をリアルタイムかつ効率的に認識したりするために、仮定した形状に係る情報を少なくとも所定期間、記憶しておき、後の処理に利用する。ブロックセットの形状は、それを構成する通信ブロックおよび非通信ブロックに構造上の識別番号(以下、「要素番号」と呼ぶ)を与えることにより管理する。同図ではブロックセットの通信ブロックに「#C1」、非通信ブロックに「#N1」なる要素番号が与えられている。この例では通信ブロックと非通信ブロックの区別を、アルファベットの「C」および「N」で区別しているが、これにより要素番号のフォーマットを限定するものではない。
これらの要素番号を、図8や図10で示した、各ブロックにあらかじめ付与された識別番号と対応づけたうえ、非通信ブロックと通信ブロックとの接続関係(接続面、接続されている位置や向き)に係る情報とともに記録する。以後、このようなブロックセット全体の構造に係る情報を「構造データ」と呼ぶ。このようにブロックごとに構造を管理することにより、上記のような表示が可能となるほか、1つの塊として画像に表れていたブロックセットを、ユーザが着脱させる単位に分割できるため、組み立て中のブロックセットや変形されたブロックセットの形状特定を効率化できる。ブロックセットの形状をそのまま描画する場合は、この時点において描画に用いるポリゴンおよびテクスチャを生成しておいてもよい。そして以後の形状特定処理においては、この3Dモデルを修正したりブロックの追加や削除をしたりしてよい。
時刻T1においてブロックセットの形状200のような形状を認識した後も、撮影や形状特定処理を継続している。このときユーザがブロックセット190の頂点をカメラ122側へ傾けた場合、時刻T2における撮影画像192bでは図示するように、通信ブロック194、非通信ブロック196の上面がいくらか含まれる像となる。このような画像から奥行き画像を生成し、その時点における状態のコアとのボリューム差分をとると、残りの部分には非通信ブロックの円柱の上面が含まれる(奥行き画像198b)。その像の形状から、当該非通信ブロックは時刻T1で仮定した直方体ではなく、円柱である可能性が高いと判定できる。このような修正を、ブロックセットの姿勢の変化とともに繰り返すことにより、ブロックセットの形状認識の信頼性が上がっていく。
非通信ブロックが円柱であることが判明した時点で、構造解析部22は、時刻T1で直方体と仮定した非通信ブロックの形状を、円柱と入れ替える。これにより正確なブロックセットの形状202が認識されたことになる。この処理は実際には、要素番号#N1に対応づけた直方体型のブロックの識別番号を、円柱型のブロックの識別番号に修正する処理となる。あるいはポリゴンモデルを修正してもよい。図11の例は理解を容易にするため、ごく簡易な構造のブロックセットを例示したが、実際には、例えば非通信ブロックの背後にさらに非通信ブロックが接続されていたり、他のブロックと重なりあって非通信ブロックの一部のみが見えていたりすることが考えられる。
この場合、上述のように、各非通信ブロックの形状を仮定して、ユーザがブロックセットを持って傾けたり方向を変化させたりするのに応じて判明した部分のみを徐々に特定していく手法のほか、複数の方向から撮影できるようブロックセットをカメラ122に対して回転させるようにユーザに促す表示をしてもよい。また非通信ブロック情報テーブル180から、隠蔽されていない部分の形状や色に基づき候補となる非通信ブロックを抽出しリスト表示することにより、ユーザが実際のブロックを指定できるようにしてもよい。また、各非通信ブロックに、形状を表す2次元バーコードや図形のマーカーを貼付することにより、撮影画像から形状を特定してもよい。
図12は組み立て中などで構造が変化するブロックセットの形状を特定する処理を説明するための図である。図の表し方は図11と同様であり、縦軸を時間軸として、各時刻の撮影画像192b〜192d、コアの部分を除いた像の奥行き画像198b〜198d、認識されるブロックセットの形状202、210、216を左から順に示している。同図最上段の時刻T2は図11の時刻T2に対応し、撮影画像192b、奥行き画像198b、認識されているブロックセットの形状202も同一である。この状態から、後の時刻T3において、ユーザが新たな非通信ブロック204を接続したとする(撮影画像192c)。このときの奥行き画像198cを、その前の時刻T2における奥行き画像198bと比較すると、追加された非通信ブロックの像206が増えていることがわかる。
構造解析部22は、前の時刻T2における奥行き画像198bと現時刻T3における奥行き画像198cを比較することにより、新たな非通信ブロック204の接続を認識する。ここで前の時刻でも存在した非通信ブロック196は、カメラに対する向きが変化している可能性があり、新たに接続されたブロックとの区別がつかないおそれがある。そこで構造解析部22は一旦認識した非通信ブロックに対し、位置姿勢トラッキングを継続して実施することにより、位置や姿勢が変化しても同一のブロックは同一なものとして認識できるようにする。位置姿勢のトラッキングとして、アクティブ輪郭モデルなどを用いた一般的なトラッキング技術を適用してよい。あるいはコアからの信号により特定できる、コアの位置や姿勢の変化から、それと接続状態にある非通信ブロックの向きの変化を導出してもよい。
そのようにしてボリューム差分後の像を比較した結果、新たな非通信ブロック204が接続されたことが検出できたら、図11で説明したのと同様に、非通信ブロック情報テーブル180を参照するなどして当該非通信ブロックの形状を特定する。そして同時刻のコアの形状や姿勢に基づき、コアとの接続関係を特定する。その結果、時刻T3におけるブロックセットの形状210が、図示するように認識できる。このとき、追加された非通信ブロックに新たな要素番号「#N2」を付与し、当該ブロックにあらかじめ付与された識別番号と対応づけるとともに、通信ブロックとの接続関係を記録することにより構造データを更新する。
なおカメラの視野に存在する非通信ブロックが接続されたのか未接続なのかを判定するため、コアを含むブロックセットと、視野にあるブロックとの相対速度を監視してもよい。この場合、相対速度が0となったときに、新たなブロックが接続されたと判定する。時刻T3の後の時刻T4においては、ユーザが、以前接続していた非通信ブロック196を、別の形状の非通信ブロック214に接続し直したとする(撮影画像192d)。このときの奥行き画像198dを、その前の時刻T3における奥行き画像198cと比較すると、非通信ブロックの像215の形状が変化していることがわかる。
そのようにしてボリューム差分後の像を比較した結果、非通信ブロックが別の形状のものに接続し直されたことが検出できたら、これまでと同様に、非通信ブロック情報テーブル180を参照するなどして、新たな非通信ブロックの形状を特定する。コアとの接続関係は以前接続されていたものと同じであるため、以前の情報をそのまま利用できる。したがって、構造データにおいて以前と同じ要素番号「#N1」に対応づけられていた、ブロックの識別番号のみを今回特定したものに更新することにより、時刻T4におけるブロックセットの形状216が、図示するように認識されたことになる。
別の形状の非通信ブロックが接続される場合以外に非通信ブロックが変形する例として、当該非通信ブロックに内包されているコアの関節角が変化した場合が考えられる。図13はコアの関節角の変化に起因して変形するブロックセットの形状を特定する処理を説明するための図である。図の表し方は図11、12と同様であり、縦軸を時間軸として、各時刻の撮影画像192e〜192g、奥行き画像198e〜198g、認識されるブロックセットの形状218、222、224を左から順に示している。ただしブロックセットの形状は図11、12で示したものと異なり、マーカーと関節を備えた通信ブロック226のうち上下のリンクを包含するように、非通信ブロック228、230がそれぞれ装着されているものとする。
関節が曲がっていない時刻t1における撮影画像192eに基づき生成した、ボリューム差分後の奥行き画像198eでは、非通信ブロックは見かけ上、1つの塊として表れる。したがって構造解析部22は、1つ(一連)の通信ブロックと、1つとみなした非通信ブロックにそれぞれ要素番号「#C1」、「#N1」を付与してそれぞれのブロックの識別番号と対応づけ、両者の接続関係を構造データとして記録することにより、ブロックセットの形状218を図のように認識する。
次に時刻t2において、ユーザがコアの関節を曲げたとする(撮影画像192f)。このときの奥行き画像198fを前の時刻t1における奥行き画像198eと比較すると、非通信ブロックの形状が変化していることがわかる。構造解析部22はブロックセットから別途送信されたコアの情報から、非通信ブロックが包含しているコアの状態を取得している。つまり通信ブロックの関節角についても把握している。したがって、非通信ブロックの変形と対応する角度で、中にある通信ブロックの関節角が変化している場合は、当該非通信ブロックの変形がコアの屈伸に起因する、と判定できる。
これにより、別のブロックを接続し直したのではなく、元は1つのブロックとして認識していたものが実際は複数のブロックであったことを特定できる。この場合、例えば傾きが変化した方の非通信ブロック(図では上部のブロック)に、新たな要素番号「#N2」を付与し、傾きに変化がなかった方は要素番号「#N1」をそのまま用いて構造データを修正する。コアとの接続関係も要素番号の修正に伴い適宜修正する。これにより時刻t2におけるブロックセットの形状222が、図示するように認識できる。
同図の例では上部と下部のブロックの区別が傾き角度やブロックの形状から明白であるが、傾き角度が小さかったり、角度が変化しても隙間が目立たない形状や材質のブロックであったりすると、ブロックの切れ目がわかりにくいことが考えられる。この場合、例えば関節が曲がっていないときのコアの軸に垂直な分割面220を関節の位置に設定し、この分割面によってブロックを分割することによって、元々1つと見なしていたブロックを2つに分けてもよい。この場合、元々接していた下部のブロックの上面および上部のブロックの底面として、分割面220の平面を仮定しておき、以後の形状特定処理で修正していくようにする。
時刻t2における処理により、非通信ブロックが2つのブロックからなることが認識されたため、その後の時刻t3において、ブロックセットの関節が曲がっていない時刻t1のときの状態に戻ったとしても(撮影画像192g、奥行き画像198g)、情報処理装置10では2つの非通信ブロックが連なっている状態と認識できる(ブロックセット224)。以後は、コアの関節に曲げ伸ばしが生じても、リンクを包含する非通信ブロックは個別に管理されているため、新たに形状を特定するなどの処理の必要はない。
このように一時的に向きや間隔が変化することなく、複数のブロックが1つの塊として組み立てられている場合は、それらをまとめて1つのブロックと見なすことによりデータ管理を簡易にしてもよい。逆に、1つの塊として組み立てられていても、色やテクスチャが異なり別のブロックであることがわかる場合は、それらの情報に基づき各ブロックを個別に管理してもよい。特に、ユーザがブロックを着脱する過程をも正確に認識する必要がある場合は、各ブロックを個別に管理することで、構造データの修正を変化のあった部分に限定できるため処理効率の面で有利である。
また、得られたブロックセットの状態をオブジェクトとして表示装置16に表示する場合、あるいはポリゴンおよびテクスチャの情報として構造データを保持する場合、特定した形状をそのまま反映させるのでなく、解像度を粗くするローポリゴン化を行い、処理の負荷やメモリ消費を抑えてもよい。あるいは非通信ブロック情報テーブルにおいて、各非通信ブロックをさらに別のオブジェクトモデルに対応づけておき、表示時には当該非通信ブロックの部分を、それに対応づけられたオブジェクトモデルに代替させて描画してもよい。これにより、ブロックが直方体など大雑把な形状であっても、表示時にはリアルなオブジェクトに変換されて表示されることになる。このように、情報の詳細度を実際のブロックセットより下げるか、そのままとするか、上げるかは、ブロックセットの状態を利用して情報処理部30がなすべき処理、情報処理装置10の処理性能、メモリ容量などによって適宜設定する。
なお図11〜13で示したように、本実施の形態では、ブロックセットの時間変化をコアと非通信ブロックの双方について取得していることになる。したがって、当該時間変化を履歴として所定時間記憶しておき、必要に応じて読み出し利用することにより、様々な態様を実現できる。例えば組み立て中のブロックセットを数段階前の状態に戻したいとき、ユーザが入力装置14を介してリクエストすると、当該段階のブロックセットの状態が3Dオブジェクトとして表示されるようにする。ユーザは、それを見ながら実際のブロックセットを前の状態に戻せる。3Dオブジェクトとして描画されたブロックセットに対する仮想的な視点を入力装置14によって変化させれば、以前のブロックセットの状態を複数方向から確認することもできる。履歴を長時間保存しておけば、過去に作成したブロックセットを制作段階ごとにオブジェクトとして表示し、それに倣って実際のブロックセットを組み立て再現することもできる。
また、図12の円柱型の非通信ブロック196のように、一旦外されたブロックの情報を、構造データからすぐには削除せずに元の要素番号をそのまま付与しておき、外されたことを示すフラグなどで管理してもよい。この場合、同じ箇所に別のブロックがつけられた場合は同じ要素番号が複数の非通信ブロックに与えられることになるが、フラグによって、現在の情報か過去の情報かを判別できる。そしてブロックセットを前の状態に戻したい旨のリクエストがユーザよりなされたら、元のブロックを構造データから検出して復帰させることにより、前の状態のブロックセットのオブジェクトを表示できる。
次に、これまで述べた構成によって実現できる、ブロックセットの状態特定に係る情報処理装置の動作について説明する。図14は非通信ブロックを含むブロックセットの状態を特定する処理手順を示すフローチャートである。このフローチャートは、ユーザが、ブロックセット120のブロックのうちバッテリーを備えるいずれかのブロックの電源を入れ、情報処理装置10においてアプリケーションを選択するなど処理開始の指示を、入力装置14を介して入力したときに開始される。
なおここで示す情報処理装置10の処理と並行して、ユーザによって組み立てられたり持ち上げられたりしているブロックセットから、コアの状態を表す信号が所定のタイミングで送信されているものとする。またこのフローチャートは非通信ブロックの変化に着目しており、コアの状態変化については別途、コアの状態を表す信号などから求めているものとする。まず構造解析部22はカメラ122に、ブロックセットの撮影を開始させる(S10)。一方、情報処理部30、表示処理部32の協働により、所定の初期画像を表示装置16に表示する(S12)。このとき表示する画像は、カメラ112が撮影したライブ映像や、ゲーム画像などアプリケーションの一部としてあらかじめ作成された画像などでよい。
時間ステップt=0(tは時間の経過を昇順で表す整数)において、コア情報受信部20がブロックセットから送信された情報を受信すると、構造解析部22は、当該情報に基づき、コアの3次元空間での姿勢や形状を特定する(S14、S16)。撮影画像以外の手段により位置が判明する場合は、コアの位置も特定する。一方、構造解析部22は、カメラ122から撮影画像を取得し、それに基づき奥行き画像を生成するなどしてブロックセットの全体像と位置を取得する(S18)。撮影画像には、ブロックセット以外の物や背景、ユーザの手などが映り込んでいる可能性があるため、いずれかの段階でこれらの像を除く処理を行っておく。
この処理には前景抽出、SLAM(Simultaneous Localization And Mapping)法、カラーセグメンテーション、辞書ベースの物体認識などの一般的な手法を用いることができる。そのようにして抽出したブロックセットの全体像に対しコアがどのように位置するかを特定する(S20)。具体的には上述のように、コアのマーカーなど特徴的な形状、色、模様などを有する部分をブロックセットの像から検出し、当該部分を基準にコアの位置を決定する。そしてS16で特定した、コアの形状や姿勢に基づき、カメラからのコアの見え方を特定する。これはすなわち、非通信ブロックがなかった場合のブロックセットの像であるため、実際のブロックセットの全体像とのボリューム差分をとることにより、非通信ブロックの像および位置を取得する(S22)。
それより前の時間ステップt−1で非通信ブロックの状態を取得している場合は、それと今回の非通信ブロックの像とを比較し(S24)、変化があるか否かを確認する(S26)。像の形状に変化がある場合は(S26のY)、非通信ブロックの形状特定およびブロックセットの構造データの更新処理を行う(S30)。なお時間ステップt=0のときはS22で取得した非通信ブロックの状態自体を変化とみなし、それに基づき構造データを新規に作成する。
S30の処理は、図11〜13を参照して説明したように、非通信ブロックの追加や除外、別の非通信ブロックへの付け替え、コアの関節が曲がることによる非通信ブロックの形状変化、に場合分けし、それぞれに対してなすべき処理を行う。すなわち、追加された場合は要素番号を付与し、それぞれ形状や接続方向などと対応づけたうえ、コアとの接続関係を記録する。除外された場合は、構造データから削除するか、除外されたことを示すフラグを立てるなどして管理する。別の非通信ブロックへ付け替えられたときは、該当する要素番号に対応するブロックの形状や接続方向などを更新する。
コアの関節が曲げられたことによる形状変化時は、当該関節を挟むリンクごとに非通信ブロックが管理されていなければ、それらを別のブロックとして一方に新たな要素番号を与え、それぞれのブロックの形状や接続方向を更新して個別に管理する。また、コアや非通信ブロックの形状が変化していなくても、位置や姿勢の変化によって非通信ブロックの像が変化する。この場合、隠蔽などによって形状が確定できず仮定していた部分の形状が一部でも判明するかを確認し、判明する場合はそれに応じて構造データを更新することにより時間発展的に形状を特定していく。上述のとおり構造データは、3Dグラフィックスのモデルデータとして表してもよい。
S26において像の形状に変化がなければ(S26のN)、少なくとも非通信ブロックの状態は変化していないことになるため、S30の処理は行わない。ユーザが処理を終了させる入力を行うまで、時間ステップtをインクリメントしながら順次、S16からS30の処理を繰り返す(S32のN、S28)。ブロックセットの電源が切断されるなどして処理を終了させる指示入力がなされたら処理を終了する(S32のY)。なおS20の処理において、カメラから見てコアの全体が非通信ブロックによって隠蔽されている場合は、コアの位置合わせができないことになる。この場合は、コアがカメラの視野に入るようにブロックセットの向きを転換するよう、ユーザに促す表示を行ってもよい。あるいは、コアの全体像がブロックセットの全体像からはみ出さないようにコアに対するカメラ座標系を仮定し、その後の時間ステップで修正していくようにしてもよい。
なおこれまでの説明では主に非通信ブロックの形状変化に着目していたが、非通信ブロックの色やテクスチャが変化した場合も同様の処理で構造データを更新できる。ただしこの場合は、まず奥行き画像においてコアとの位置合わせを行うことにより全体像からコアの部分を除外したら、残された非通信ブロックの像の領域を、撮影されたカラー画像にフィードバックすることにより、色やテクスチャの変化を特定する。
図15はこれまで述べた態様によって実現できるブロックセットと表示の関係を例示している。同図の例では、通信ブロックおよび非通信ブロックを含むブロックセット240を、情報処理装置10が認識した通りに3Dオブジェクト242として描画し、表示装置16に表示している。非通信ブロックの形状、姿勢、色などはカメラ122が取得するため、非通信ブロック情報テーブルに登録されていないもの、例えばユーザが自作したものでも認識できる。例えば同図において、ブロックセット240として組み立てられた人形の顔をユーザがマジックで書いたりシールを貼ったりしても、それと同様の顔の人形やシールが貼られた人形が3Dオブジェクトとして描画される。
この例では、実際のカメラ122の視野にあるブロックセットを、鏡面処理により左右反転させオブジェクトとして表している。ブロックセット240は表示装置16上のカメラ122に正対しているため、表示上の3Dオブジェクト242はブロックセット240が鏡に映ったような状態で表示される。一方、情報処理装置10は上記のとおり、ブロックセット240の3次元形状を認識しているため、3Dオブジェクト242に対する仮想的な視点を自由に変えることができる。したがって、この時点ではカメラ122からの死角になっている人形の背中側の像も、ブロックセット240を回転させずに表示できる。ただしそれまでの形状特定処理によっては、背中側の形状の詳細が確定的でない場合もある。
これまでの説明では、実際に組み立てられたブロックセットの状態認識を基本としていたが、実物では接続されていないものを仮想的に接続できるようにしてもよい。図15に例示される画面では、ブロックセット240を反映した3Dオブジェクト242とともに、装備するアイテムの選択肢の画像244、246を表示している。ユーザが入力装置14を介して、あるいはブロックセット240を動かすなどして1つの画像を選択し、画面上の3Dオブジェクト242に持たせたら、情報処理装置10は認識済みのブロックセットの該当箇所に、当該アイテムが接続されたことを示すように、構造データを更新してもよい。
選択肢となるアイテムは、情報処理装置10のブロック情報記憶部24、あるいはモデルデータ記憶部26において3次元形状を保持しておく。これにより、以後の処理では、ブロックセットとして実際に接続されているか仮想的に接続されたかに関わらず、ブロックセットの実空間での動きに合わせて、画面上のアイテムも3Dオブジェクト242に持たれた状態で、仮想世界で動くように表現できる。ユーザが自作するなどした実物を3Dスキャナーで取り込み、3次元の形状情報を取得すれば、上記のアイテムの代わりとなる。すなわち非通信ブロックの実物があっても、実際に接続せずに画面上では接続されているように表示することができる。
同様の手法により、ブロックセットの外観自体を表示上の仮想世界で作成するようにしてもよい。図16はブロックセットに対し外観を設定する場合のブロックセットと表示の関係を例示している。この例では図15の場合と比較し、ブロックセット248自体は、例えば通信ブロックのみなど簡素な構成となっている。このようなブロックセット248の状態を認識すると、情報処理装置10は表示装置16に、認識されたブロックセットの状態をそのまま、あるいは左右反転させて3Dオブジェクト250として表示する。そして図15のアイテムと同様、候補となる3Dオブジェクトの選択肢の画像252a、252b、252cを、例えば顔など部位ごとに表示する。
ユーザは、ブロックセットのブロックごと、または複数のブロックで構成される部位ごとに、画像252a、252b、252cからの選択入力を行うことにより、3Dオブジェクト250に仮想的に接続していき、外観を完成させる。これにより、様々な外観の3Dオブジェクトを自由に作成し、さらに実際のブロックセット248の動きに合わせて当該3Dオブジェクトを動かしたり、仮想的な視点を変化させたりすることができる。また、このようにして仮想的な外観を作成したブロックセットを複数、接続することにより、表示上で仮想的な3Dオブジェクトが連結していくようにしてもよい。
例えば目標とする3Dオブジェクトの完成形のうち、パーツごとにブロックセットとそれに対応する外観を作成していき、最後にブロックセットを接続すれば、詳細な部分まで設定された外観を有する完成形が表示されるような態様を実現できる。あるいは、一旦作成した仮想的な外観の3Dオブジェクトを保存しておき、同じブロックセットでまた別の外観の3Dオブジェクトを作成する、という手順を繰り返したうえ、そのように作成した複数の3Dオブジェクトを仮想世界でのみ連結させてもよい。この場合、最後にブロックセットと対応づけた3Dオブジェクトがブロックセットと連動するのに伴い、連結した全ての3Dオブジェクトがブロックセットに合わせて動く態様を実現できる。
図15、16の例では、ブロックセットの動きを仮想世界の3Dオブジェクトに反映させたが、それとは逆に、3Dオブジェクトの動きをブロックセットの動きに反映させるようにしてもよい。例えば情報処理部30が実行するゲーム内のキャラクタとして、ユーザが組み立てたブロックセットを表す3Dオブジェクト、あるいはユーザがブロックセットに対応させて仮想的に作成した3Dオブジェクトを登場させる。ユーザは入力装置14を用いてゲーム操作を行い、それによって3Dオブジェクトが動いたら、実際のブロックセットも動くようにする。この場合、駆動制御部34は、3Dオブジェクトの動きに合致するようにブロックセットの駆動部148を制御する信号を送信する。
図16の例ではユーザが、1つあるいは複数のブロック単位で3Dオブジェクトを当てはめていく態様を想定していたため、実際のブロックと仮想的なオブジェクトとの対応関係は非通信ブロックと同様であり、管理も同様に行える。すなわち、実際のブロックセットの関節角が変化すれば、当該変化によって変形する箇所は3Dオブジェクトでも明らかなため、画面表示に容易に反映させることができる。3Dオブジェクトの動きをブロックセットに反映させる場合も同様である。一方、組み立てたブロックセット全体に対し、1つの3Dオブジェクトを対応づけるようにした場合、それらを好適に連動させるには、ブロックセットと3Dオブジェクトの対応箇所を適切に設定する必要がある。
図17は組み立てたブロックセットに対し1つの3Dオブジェクトを対応づけた場合のブロックセットと表示の関係を例示している。この例では、ユーザがクレーン車に見立てたブロックセット260を作成し、表示上の3Dオブジェクトとしてクレーン車262を選択した場合を想定している。ブロックセット260にはクレーンに見立てたブロックに複数の関節264a、264b、264cが設けられ、さらに台となるブロックには車輪266a、266b、266c、266dが装着されている。
例えばユーザがブロックセット260の関節を屈伸させて画面上のクレーン車262を同じように動かす場合、関節264a、264b、264cの屈伸をクレーン車262のどの箇所に反映させるかを設定しておく必要がある。また、クレーン車262の表示上の移動をブロックセット260の実際の動きに反映させる場合は、表示上の移動に合わせて各車輪の役割や回転速度、操舵角などを決定する必要がある。本実施の形態においてブロックセット260はユーザが自由に組み立てる物であるため、クレーンとして動かしたい部分やクレーン車の前後関係などはユーザの意図に依存するところが大きい。そこで、このように自由に組み立てられた物とあらかじめ準備した3Dオブジェクトの動きに係る対応関係を設定する手法について説明する。
図18はブロックセットと3Dオブジェクトの動きを対応づけるために必要な情報を例示している。同図の左側は図17のブロックセット260に対応するブロックセット270の模式図、右側は図17の3Dオブジェクトのクレーン車262に対応するクレーン車272の模式図を表している。図示するように、ブロックセット270には、情報処理装置10が形状を認識した際に用いた座標系が設定されており、クレーン車262には、当該3Dモデルに対するローカル座標系が設定されている。両者は独立に設定されるため、各座標系におけるブロックセット270およびクレーン車272の向きも様々となる。
図18の例では理解を容易にするため、ブロックセット270およびクレーン車272が、各座標系のx軸と平行な状態で定義されている場合のx軸y軸からなる2次元平面における形状、すなわち側面形状を表している。ただし各座標系に対するブロックセット270およびクレーン車272の向きは、x軸に対して反対方向となっている。ここでブロックセット270が有する3つの関節をRJ1、RJ2、RJ3とし、クレーン車272が有する3つの関節をVJ1、VJ2、VJ3とする。またブロックセット270が有する4つの車輪をRA1、RA2、RA3、RA4、クレーン車のキャタピラをVA1、VA2とする。なお車輪RA3、RA4、キャタピラVA2は、表示面と逆の側面にあり本来は隠蔽されているが、図18においては点線にてずらして表し、符号は括弧内に示している。
このようなブロックセット270とクレーン車272を連動させるには、最も単純には、ブロックセット270の関節RJ1、RJ2、RJ3をクレーン車272の関節VJ1、VJ2、VJ3にそれぞれ対応づけ、車輪RA1、RA2を図示しないキャタピラVA2に、車輪RA3、RA4をキャタピラVA1にそれぞれ対応づけることが考えられる。しかしながらこの例ではクレーンの関節の位置が両者で異なっているため、例えば両者の対応する関節をそれぞれ同じ角度で曲げるようにした場合、ユーザが期待したような動きにならないことが考えられる。
また一般的には、ブロックセット270の関節角には物理的な可動範囲が存在し、クレーン車272の関節にもモデル上の可動範囲が存在する。そのような拘束条件を考慮しないと、3Dモデルがあり得ない角度に曲がったり、ブロックセットの関節角が限界に達してそれ以上動かなくなってしまったりすることが起こり得る。また座標系に対する向きの違いにより、ブロックセット270を前進させているのに表示上のクレーン車272は後退している、といったことも起こり得る。そのような不具合が生じないよう、座標系の共通化、対応箇所の設定、対応する箇所の具体的な動きの対応づけ、といった処理を経ることにより、実物と仮想世界での物との連動の調和を図る。
図19は情報処理装置10が、ブロックセットと3Dオブジェクトの動きに係る対応づけを行う処理手順を示すフローチャートである。まずユーザは所望の形状にブロックセットを組み立てた後、入力装置14を介して、3Dオブジェクトとの対応づけを開始する指示要求を入力する。情報処理装置10の情報処理部30は当該要求を受け付けると(S40)、構造解析部22から、組み立てられたブロックセットの構造に係る情報を取得する(S42)。そしてモデルデータ記憶部26に描画データが準備された3Dオブジェクトのうち、ブロックセットの形状などに基づき好適なモデルを候補として抽出する(S44)。
モデルデータ記憶部26には、クレーン車など各種オブジェクトモデルの描画データと、各モデルの特徴を表すメタデータとを対応づけて格納しておく。このメタデータには大きく分けて物としての特徴、構造的な特徴、外観上の特徴が含まれる。物としての特徴とは、人、動物、乗り物、食べ物などの品目、キャラクタとして登場する映画、アニメーション、ゲームの名前やキャラクタ名などの固有名詞、原始時代、中世、現代、未来、特定の年など関連する時代、などである。構造的な特徴とは、関節の数、各関節の可動角や自由度、リンクの長さや太さ、関節の接続関係、駆動力、タイヤ径などである。
外観上の特徴とは、色、表面形状、非通信ブロックの個数や体積、ブロックセットにおける非通信ブロックの被覆率、LEDや表示装置を備えている場合はその個数、表示装置の種類などである。モデルデータ記憶部26には各モデルに対し、そのように多角的な特徴を対応づけておく。対応づける特徴が多いほど適した候補の抽出精度が上がるが、全ての特徴を対応づける趣旨ではない。S44において情報処理部30は、S42で取得したブロックセットの形状や構造に係る情報から、構造的な特徴、外観上の特徴に基づき、実際のブロックセットと類似度が高い候補モデルを抽出する。
例えば、ブロックセットの関節数をNRJ、車輪数をNRA、3Dオブジェクトの関節数をNVJ、車輪数をNVAとすると、次のような式によって類似度評価値を算出する。
類似度評価値 = (NRJ−NVJ)×wJ +(NRA−NVA)×wA
ここでwJ、wAは、関節数の評価および車輪の評価に対する重みであり、両者の重要性によって決定する。この評価値は0に近いほど類似度が高いことを意味する。また、評価値が正の場合はブロックセットの関節や車輪が多い傾向にあり、負の場合は3Dオブジェクトの関節や車輪が多い傾向にあることを意味する。評価値が0となる3Dオブジェクトがあれば、それを最有力な候補モデルとして抽出する。
さらに、評価値の絶対値が同じで正負が異なる複数の3Dオブジェクトがあれば、負の評価値となる3Dオブジェクトを優先して抽出する。これは、3Dオブジェクトの関節や車輪が多いほど、画面上で細かい動きを表せ、ブロックセットの動きをより豊かに表現できるためである。そのような類似度の評価を行う前に、物としての特徴の中からユーザが選択した特徴に基づき、候補を絞り込んでもよい。物としての特徴、構造的な特徴、外観上の特徴を適宜組み合わせて抽出してもよいし、ユーザが物としての特徴以外の特徴も指定できるようにしてもよい。
情報処理部30は、そのようにして抽出した複数の候補モデルを表示装置16に表示させ、ユーザが入力装置14などを介して行った選択入力を受け付ける(S46)。これにより選択されたモデルの例が、図18で示したクレーン車272である。次に、ブロックセットと画像上のオブジェクトに対し共通の座標系を設定する(S48)。これにより、ブロックセットの姿勢や移動方向を定めるパラメータは、3Dオブジェクトにおいても同様に扱えるようになる。例えば図18においてブロックセット270の前進がx軸の負の方向であれば、3Dオブジェクトのクレーン車272における前進もx軸の負の方向となるように座標系を設定する。また座標系を共通とすることにより、関節角の定義を共通化できるとともに、関節角が変化した場合に関節に対しどちらのリンクが動いたかについても適正に判断できる。
共通の座標系で定義された各種パラメータは、3Dオブジェクトに対し元から設定されていたローカル座標系における値に座標変換されることにより、3Dオブジェクトの描画に反映される。ブロックセットと3Dオブジェクトの形状が類似しており、前後などが明らかな場合は、両者の向きが同じになるように情報処理部33が共通の座標系を設定する。あるいは、ユーザがブロックセットの向きと同じになるように3Dオブジェクトの向きを画面上で調節し、その向きを基準とすることにより情報処理部30が座標系を設定してもよい。これにより、前後が不明確なブロックセットであってもユーザの意図した向きで3Dオブジェクトと連動させることができる。
続いてブロックセットと3Dオブジェクトのうち対応箇所を設定する(S50)。ブロックセットと3Dオブジェクトの関節数やリンクの接続関係が一致している場合、この処理は情報処理部30が一括して行える。すなわち情報処理部30は、S42で取得したブロックセットの構造と、S46で選択されたオブジェクトモデルの構造に基づき、両者の対応する関節を幾何学的に導出して対応づける。あるいは設定画面を表示させてユーザが設定できるようにする。ここで対応づける箇所は、代表的には図18の関節同士や車輪同士であるが、ブロックセットの曲がる、回転する、変位するといった変化を反映したい箇所であれば、3Dオブジェクト側の対応点はユーザが自由に設定できるようにする。これにより、軟体動物など関節を持たない動物を動作させたり、実際には曲がらない物にお辞儀をさせたりといったことができる。
なお対応づける箇所は必ずしも1対1の関係でなくてもよい。すなわち、ブロックセットの複数の関節を3Dオブジェクトの1つの関節に対応づけたり、3Dオブジェクトの複数の関節をブロックセットの1つの関節に対応づけたりしてよい。車輪についても同様である。情報処理部30は、ブロックセットと3Dオブジェクトの関節数が異なっていても、複数の関節を1つの関節と見なすことにより全体的な構造を一致させることができる場合は、関節をそのようにグルーピングしてもよい。
この場合、例えば、ブロックセットと3Dオブジェクトのうち一方の1グループの関節を、他方の1つの関節に対応づける。このとき、後者の関節角の変化を、前者の1グループの関節の動きに分配する。具体例は後に述べる。関節をグルーピングするか否かに関わらず、情報処理部30は、両者の全体的な構造に加え、各関節の可動角も考慮して対応を設定する。例えば同じ可動角を有する関節同士を対応づける。このように、全体的な構造や可動角など多角的な観点から関節同士の類似度を評価し、評価値がしきい値より高い関節同士を対応づけてもよい。情報処理部30やユーザが設定した対応箇所の情報は、対応情報記憶部28に格納する。
次に、このように対応づけられた箇所について、動きの対応を設定する(S52)。すなわち関節角の変化をそのまま反映させるか否か、関節が1対1に対応づけられていない場合は関節角の変化を分配する比率などを設定する。ブロックセットと3Dオブジェクトの構造が一致している場合であり、対応する関節の可動角が等しければ、基本的には関節角も同様とできるため、情報処理部30はそのように設定する。関節角をグルーピングすることによって構造が同様となる場合は、上述のように1つの関節角の変化を、対応する1つのグループに属する関節の動きに分配させる。ことのき、各関節の可動角の比率に応じて分配比率を決定してもよい。
このように、あらかじめ定めた規則によって動きの対応を設定できる場合は、情報処理部30が設定してよい。さらに設定画面を表示させて、ユーザが動きの対応を自由に設定したり設定済みの対応関係を修正したりできるようにする。また、3Dオブジェクトの車の動きをブロックセットの車の動きに反映させる場合は、当該3Dオブジェクトの表示上の車の速度とブロックセットの車軸の回転速度を対応づける。この関係は、ブロックセットに接続された車輪の直径によって変化するため、車輪の直径が既知であれば情報処理部30が演算により決定できる。既知でなければ後述するように、ユーザがブロックセットを実際に動かすことによって、必要なパラメータを取得する。対応づけるべき全ての箇所についてS50とS52の処理を繰り返し(S54のN)、全ての箇所を対応づけたら処理を終了する(S54のY)。
図20は、図19のS46においてユーザによるモデル選択の入力を受け付けるために表示装置16に表示する画面の例を示している。モデル選択受付画面280は、複数のモデル「モデル1」、「モデル2」、「モデル3」の画像、選択入力を促す文字列282、および入力装置14で移動可能なカーソル284を含む。「モデル1」、「モデル2」、「モデル3」は、図19のS44で抽出された候補モデルであり、上述のように物としての特徴、構造的な特徴、外観上の特徴の少なくともいずれかによってフィルタリングされた結果である。例えばユーザが物としての特徴として「クレーン車」を指定したことにより、抽出されたモデルは全てクレーン車となっている。この場合、モデル選択受付画面280を表示する前に、「クレーン車」の選択を受け付けるための画面も表示する。
抽出数は3つに限らず、条件に合致した物を全て抽出してもよいし、上述の類似度評価値を利用してモデルをランク付けし、上位となった所定数のモデルを抽出してもよい。この場合、モデル選択受付画面280には、左からランクの高い順にモデルの画像を並べてもよい。図20において「モデル1」、「モデル2」、「モデル3」はいずれもクレーン車であるが、関節の数などクレーン部分の形状が異なる。ユーザは好みのモデル、あるいはブロックセットに類似しているモデルをカーソル284により指示し、入力装置14で確定入力をするなどして一つのモデルを選択する。
なおモデルの選択には、カーソル284を介した選択入力手段以外の手段を用いてもよい。例えばユーザをカメラ122で撮影し、その奥行き画像などからユーザの指先の位置、ひいては表示画面上の指さしされた位置を検出する技術が提案されている。この技術を利用することにより、ユーザが選択対象のモデルを指さしすることで、情報処理装置10が選択されたモデルを認識するようにしてもよい。図21、22で示す各設定画面でのユーザによる入力も同様に実現してよい。
図21は、図19のS48において、ブロックセットと選択されたモデルに共通の座標系を設定するために表示装置16に表示する画面の例を示している。この例は、ユーザがブロックセットの向きに合わせて画面上の3Dオブジェクトの向きを調整することにより共通の座標系を特定している。これにより、上述のように全体構造としての前後の向きや関節に対する各リンクの位置関係、関節角の定義などを揃えることができる。モデル表示方向設定受付画面290は、クレーン車の前を左向きとする画像292、右向きとする画像294、向きの指定を促す文字列296、および入力装置14で移動可能なカーソル298を含む。
この例は、図20のモデル選択受付画面280においてユーザが「モデル1」を選択したことを想定しており、同一モデルのオブジェクトを左右2つの方向から見た画像が表示されている。例えばユーザは、図示するようにブロックセット260を置いたうえ、それと同様の向きを表している、あるいは同じ向きとユーザが考える画像を、カーソル298により指示し、入力装置14で確定入力する。図の例では左向きの画像292が選択される。すると情報処理部30は、構造解析部22が取得したブロックセット260の向きと、選択された画像における3Dオブジェクトの向きが同じ方向に定義されるように、両者に対し座標系を設定する。なおこの例のように、台車に対するクレーンの位置などの構造によって両者の前後が推定できる場合は上述のように情報処理部30が座標系を設定してもよい。
図22は、図19のS50においてブロックセットと3Dオブジェクトの対応箇所を設定するために表示装置16に表示する画面の例を示している。対応箇所設定画面300は、3Dオブジェクトの画像302、コマンドリスト欄304、設定入力を促す文字列306、および入力装置14で移動可能なカーソル308を含む。画面上の3Dオブジェクトが、モデル表示方向設定受付画面290を経てブロックセットと同じ向きとなっていることにより、ブロックセットとの対応がユーザに理解されやすくなる。対応箇所設定画面300にはさらに、ブロックセット260の画像310を表示してもよい。
当該画像310は、カメラ122による撮影画像、あるいは情報処理装置10が認識しているブロックセット260の状態を3Dオブジェクトとして描画した画像である。前者の場合、ブロックセット260に対しユーザとカメラ122が逆側にあるときは、撮影画像を左右反転させてユーザから見たブロックセット260を再現する。後者の場合、非通信ブロックによりコアの構造が確認しづらい場合は、コアの画像のみを表示してもよい。
まずユーザは、ブロックセット260のうち、対応づけたい関節を曲げ伸ばしするなどして動かす(例えば矢印A)。当該動きは、構造解析部22によって認識される。これによりブロックセット側の対応させるべき関節(例えばRJ2)の指定入力が実現する。次にユーザは、カーソル308により3Dオブジェクトの画像302において、3Dオブジェクト側の対応させるべき関節(例えばVJ3)を指示し、入力装置14で確定入力をする。これにより、ブロックセット260の関節RJ2と3Dオブジェクトの関節VJ3が対応づけられる。情報処理部30はそれらの対応関係を記録し、対応情報記憶部28に格納する。
このような設定を、ブロックセット260のユーザが動かしたいと考える全ての関節に対して行う。また車輪についても同様に設定してよい。このようにして一旦設定した対応関係に基づき、実際にブロックセット260を動かしてみたときの3Dオブジェクトの動きをユーザが確認できるようにしてもよい。そして必要に応じて修正できるようにしてもよい。そのため、コマンドリスト欄304には直前に設定した対応箇所を無効にして設定し直すための「prev」ボタン、現在の設定を確定させて次の対応箇所を設定するための「next」ボタン、現時点での全ての設定を保存して設定処理を終了させる「stop」ボタンなどのGUIを表示する。さらに各種設定画面をメニューとして表示した画面へ移行するための「menu」ボタンも表示する。なお動きの確認処理は、後述する動きの対応を設定した後でもよく、それに応じて「prev」ボタンや「next」ボタンによって、設定を無効とする否かを確定させてもよい。
なお関節の可動角や構造上の拘束条件から、ブロックセット260の指定された関節に対応づけられる3Dオブジェクトの関節が自動的に絞り込める場合は、情報処理部30は当該関節を候補としてユーザに示唆してもよい。すなわちブロックセット側の対応させるべき関節が指定された時点で、対応箇所設定画面300に表示された3Dオブジェクトの画像302のうち、対応先の候補となる関節の色を変化させるなどして、そのうちのいずれかをユーザが選択できるようにする。これにより、ユーザによる自由な対応設定を許容する場合でも、無理な対応づけを回避することができる。
また上述のようにブロックセットの複数の関節を3Dオブジェクトの1つの関節に対応づけたり、ブロックセットの1つの関節を3Dオブジェクトの複数の関節に対応づけたりできるようにする。図22の例では、3Dモデルの関節VJ3に、ブロックセットの2つの関節が対応づけられていることを示す2つの目印312が付与されている。これは例えば、ブロックセット260の関節RJ1を動かして3Dオブジェクトの関節VJ3と対応づけ、さらに関節RJ2を動かして3Dオブジェクトの同じ関節VJ3対応づける操作により実現される。
一方、3Dオブジェクトの関節VJ1とVJ2は1つにグルーピングされ、ブロックセットの1つの関節に対応づけられていることを示す楕円314で囲まれている。このように3Dオブジェクトの複数の関節を1つのグループとするため、コマンドリスト欄304には、グループを示す楕円314を描画するための「group」ボタンのGUIも表示する。例えばユーザは、ブロックセット260の関節RJ3を動かす。そして、画面上の「group」ボタンをカーソル308により選択したうえ、3Dオブジェクトの関節VJ2およびVJ1を囲むような楕円314を描画する。これにより、ブロックセット260の関節RJ3と3Dオブジェクトの関節VJ2およびVJ1が対応づけられる。
ブロックセットと3Dオブジェクトの全体構造や可動角などの観点から、情報処理部30が、グルーピングの好適なパターンをいくつか決定し、対応箇所設定画面300に候補として表示させてもよい。この場合、ユーザがそこから一つのパターンを選択することによりグルーピングを確定させる。あるいは3Dオブジェクトのメタデータとして、グルーピングのパターン候補を作成しておき、対応箇所設定画面300に表示させることによりユーザが選択してもよい。なお対応箇所設定画面300にブロックセットの画像310を表示する場合は、カーソル308により当該画像310上でブロックセットの関節を指定してもよい。また、対応づけがなされた関節は、3Dオブジェクトの画像302とブロックセットの画像310において同じ色で表示したり、線で結んだりして対応関係が明示されるようにしてもよい。
次に、このように対応づけた関節の動きの対応について説明する。この対応は、図19のS52において、情報処理部30、ユーザ、あるいは両者の協働によって設定される。図23は基本的な態様として、ブロックセットと3Dオブジェクトの関節が1対1で対応づけられ、各関節が同じ角度で動く場合を示しており、左がブロックセットの関節部分320a、右が3Dオブジェクトの対応する関節部分322aである。すなわちブロックセットの関節部分320aが、関節が曲がっていない状態から角度θだけ曲げられたら、3Dオブジェクトの対応する関節部分322aも角度θだけ曲げる。情報処理部30が行う処理によっては、3Dオブジェクトの関節部分322aを角度θだけ曲げたら駆動制御部34を介してブロックセットの駆動部148であるアクチュエータなどを駆動させることにより、対応する関節322aを角度θだけ曲げるようにしてもよい。
このような態様を基本とし、可動角や対応させる関節の数などの拘束条件、あるいはユーザの意図などに応じて様々な設定を実現する。図24はグルーピングされた2つの関節が1つの関節に対応づけられている場合の各関節の角度の対応例を示しており、左がブロックセットの関節部分320b、右が3Dオブジェクトの対応する関節部分322bである。この例では、ブロックセットの2つの関節部分320bが3Dオブジェクトの1つの関節部分322bに対応づけられている。そしてブロックセットの一方の関節が角度θ1、他方の関節が角度θ2だけ曲げられたら、3Dオブジェクトの対応する関節部分322bをその合計である角度(θ1+θ2)だけ曲げる。つまりブロックセットの2つの関節による関節角の変化を、3Dオブジェクトの1つの関節により実現する。
この態様は、ブロックセットの各関節の可動角が、3Dオブジェクトの対応する関節に要求される関節角の変化より小さい場合に有効である。ブロックセットの3つ以上の関節角の変化を合計してもよい。また3Dオブジェクトの複数の関節をグルーピングしてブロックセットの1つの関節に対応づける場合も角度の対応関係は同様である。この場合、ブロックセットの関節数が3Dオブジェクトの関節数より少ない場合に有効である。
また逆に、3Dオブジェクトの関節部分322bを角度(θ1+θ2)だけ曲げたら、ブロックセットの対応する2つの関節部分320bをそれぞれ角度θ1およびθ2だけ曲げるようにしてもよい。この場合、角度θ1とθ2の比率は、各関節の可動角や、ブロックセットが見立てている物、つまり3Dオブジェクトが表している物の現実的な動きなどの拘束条件によって情報処理部30が決定できる。例えばブロックセットの2つの関節の可動角が1:2であれば、角度θ1とθ2も1:2の比率とする。
ブロックセットの1つの関節の角度変化を3Dオブジェクトの複数の関節角に分配する場合も同様である。例えば図22で示したクレーン車を想定した場合、3Dオブジェクトの関節VJ1に接続しているフックは常に鉛直下向きになっているのが自然である。したがってそのような状態が保たれるように、情報処理部30が、角度θ1とθ2を算出する。このような分配規則は、3Dオブジェクトのデータとともに作成しておく。なおブロックセットおよび3Dオブジェクトのうち、一方の角度変化の合計を他方の角度変化に反映させる態様と、一方の角度変化を他方の複数の角度変化に分配して反映させる態様とを組み合わせれば、ブロックセットの複数の関節を3Dオブジェクトの複数の関節に対応づけることもできる。
図25は2つの関節がグルーピングされて1つの関節に対応づけられている場合の各関節の角度の対応の別の例を示しており、左がブロックセットの関節部分320c、右が3Dオブジェクトの対応する関節部分322cである。この例ではブロックセットの2つの関節の回転軸が異なっており、一方は図の平面に垂直な軸周りに角度が変化し、他方はリンクの軸周りに角度が変化するとする。一方、それに対応づけられた3Dオブジェクトの1つの関節は、それと対応する2つの軸周りに角度を変化させられる2自由度を有する関節とする。
そしてブロックセットの関節部分320cのうち一方の関節が角度θ、他方の関節が角度ψだけ変化したら、3Dオブジェクトの対応する関節部分322cを、各軸周りに角度θおよびψだけ変化させる。また逆に、3Dオブジェクトの関節部分322cが各軸周りに角度θおよびψだけ変化したら、ブロックセット320cの対応する2つの関節をそれぞれθおよびψだけ変化させるようにしてもよい。
図26は1対1で対応づけられている関節の角度変化を異ならせる場合を示しており、左がブロックセットの関節部分320d、右が3Dオブジェクトの対応する関節部分322dである。この例では、ブロックセットの関節が角度θだけ変化したら、3Dオブジェクトの対応する関節をその3倍の角度3θ変化させる。例えばブロックセットの関節の可動角が、3Dオブジェクトの対応する関節に要求される角度変化より小さい場合、ブロックセットを限界まで動かしても3Dオブジェクトが期待したように動かないことが考えられる。また、ブロックセットを動かす労力をあまりかけずに3Dオブジェクトをダイナミックに動かしたい場合もある。
図示するようにブロックセットの関節の角度変化に1より大きい所定の値を乗算した角度で3Dオブジェクトの関節角を変化させることで、そのような課題を解決できる。あるいはブロックセットの角度変化に1より小さい所定の値を乗算して、ブロックセットより小さい角度で3Dオブジェクトの関節角を変化させてもよい。この態様は、例えばマニピュレータ操作など、ブロックセットを動かす手の動きより高い精度で3Dオブジェクトに微細な動きをさせたいときなどに有効である。3Dオブジェクトの関節の角度変化をブロックセットの角度変化に反映させる場合も同様の設定でよい。なお一方の角度変化に所定の値を乗算して他方の角度変化とする態様は、図24や図25で示した態様に組み合わせることができる。このとき、グルーピングされた全ての関節に同じ値を乗算してもよいし、関節によって異なる値を乗算してもよい。
図27はブロックセットの1つの関節を3Dオブジェクトの複数の関節に対応づける別の例を示しており、左がブロックセットの関節部分320e、右が3Dオブジェクトの対応する関節部分322eである。この例では、ブロックセットの1つの関節部分320eが、3Dオブジェクトの3つの関節部分322eに対応づけられている。そしてブロックセットの関節が角度θだけ曲げられたら、3Dオブジェクトの対応する3つの関節をそれぞれ同じ角度θだけ曲げる。
これにより簡素な構成のブロックセットであっても、3Dオブジェクトの広い範囲にその動きを反映させることができる。例えば、ブロックセットの1つの関節を、3Dオブジェクトの関節部分322eをさらに複数接続させてなる形状の大蛇の全関節に対応づけることにより、図27の関節部分320eのみからなるブロックセットであっても、当該大蛇が前進するような動きを表すことができる。前述のように、大蛇に様々な動きをさせた動画を保存しておくことにより、後の任意のタイミングでゲームやアニメーションのキャラクタとして用いることができる。このような高度な画像表現を、関節部分320eのような簡素なブロックセットで実現できる。なおこの態様において3Dオブジェクトで対応づける関節は図示するように隣接関係にある場合に限らず、3Dオブジェクトの離れた箇所にある複数の関節でもよい。
図28は、図19のS52においてブロックツールと3Dオブジェクトの動きの対応を設定するために表示装置16に表示する画面の例を示している。動き対応設定画面330は、図22で示した対応箇所設定画面300においてユーザが対応箇所を設定するごとに、当該画面に、動きの対応を入力するためのダイアログボックス332をオーバーレイ表示させた画面である。この例は、ブロックツールの関節RJ1、RJ2がグルーピングされ、3Dオブジェクトの関節VJ3対応づけられたあと、VJ3の角度変化をブロックツールのRJ1、RJ2の角度変化に分配するときの分配比率を設定することを想定している。そのためダイアログボックス332には、比率の入力を促す文字列334、および比率の各数値を入力するテキストボックス336が表示されている。
ユーザがテキストボックスに入力装置14などを介して具体的な数値を入力することにより、情報処理部30は、ブロックツールの関節RJ1、RJ2と3Dオブジェクトの関節VJ3との対応づけに、さらに当該比率を対応づけて、対応情報記憶部28に格納する。ダイアログボックス332で設定する情報はこれに限らず、関節をグルーピングしたか否かに応じて、図23から図27のような対応づけのうち必要な情報を順次設定できるようにする。ただし上述のように、あらかじめ定めた規則により情報処理部30が動きの対応づけを行えるようであれば、ユーザによる設定は省略できる。あるいは情報処理部30が行った対応づけを、同様のダイアログボックスでユーザが修正できるようにしてもよい。
図29は対応情報記憶部28に格納される、ブロックセットと3Dオブジェクトの対応箇所とそれぞれの動きの対応にかかる情報のデータ構造例を示している。対応情報テーブル340は、ブロックセット側の対応箇所と動きを示すブロックセット情報欄342と、当該欄に記載されたブロックセットの箇所や動きに対する3Dオブジェクト側の対応箇所や動きを示す3Dオブジェクト情報欄344を含む。この例ではブロックセットの関節と3Dオブジェクトの関節を対応づけ、さらにそれらの角度変化の対応を設定している。
対応は基本的に段単位で記載されている。例えばブロックセット情報欄342と3Dオブジェクト情報欄344の各「関節」欄を見ると、ブロックセットの関節RJ1とRJ2は3Dオブジェクトの関節VJ3に対応づけられている。この対応において、ブロックセットの動きを3Dオブジェクトに反映させる場合、関節RJ1とRJの角度変化の合計が、3Dオブジェクトの関節VJ3の角度変化になることは規定されている。
逆に、3Dオブジェクトの動きをブロックセットに反映させる場合、3Dオブジェクトの関節VJ3の角度変化がθのとき、関節RJ1とRJ2の角度変化をいずれもθ/2とする、つまり分配比率を1:1にすることが、ブロックセット情報欄342と3Dオブジェクト情報欄344の各「角度変化」欄に記載されている。ブロックセットの関節RJ3は、3Dオブジェクトの関節VJ2およびVJ1に対応づけられており、ブロックセットの動きを3Dオブジェクトに反映させる場合、角度変化の分配比率は1:2である。以下、同様に、図23から図27で説明したいずれかの動きの対応が、対応箇所とともに記載されている。
これまで、主に関節の動きの対応に係る具体例を説明した。次に車輪の動きの対応づけについて説明する、関節の場合、可動角や全体構造といった拘束条件がブロックセットと3Dオブジェクトの双方にあるものの、基本的には関節同士は独立しているため、ブロックセットの関節と3Dオブジェクトの関節を同等に対応づけることができる。一方、車輪の場合、ブロックセットは関節と比較して拘束条件が多く、3Dオブジェクトは厳密に車輪の動きを規定しなくても、走っているように表現できる、という性質の違いがある。すなわち、ブロックセットと3Dオブジェクトが連動しているように見せるには、移動方向とおよその速度が対応づけられていればよい。そしてこのような対応関係は、図19のS48において共通の座標系を設定することによって得られる。
ユーザがブロックセット260を移動させ、それを3Dオブジェクトに反映させる場合は、そのような対応関係のみで容易に実現できる。具体的には、ブロックセットの移動量や移動方向をカメラ122の撮影画像などから取得し、それに基づき3Dオブジェクトも同様に移動しているように表現すればよい。一方、3Dオブジェクトの動きをブロックセットに反映させる場合は、拘束条件に従った設定が必要となる。例えば車輪が協調動作しないと車を走行させることができない。また車輪の直径によって望ましい速度を得るための車輪の回転速度が変化するため、適切に調整しないと高速になりすぎ壁に衝突するなどのおそれがある。
このように車輪の動きの対応づけは、ブロックセットに拘束条件が偏っているため、関節ほどユーザによる自由な設定の余地がない。したがって主に情報処理部30が動きの対応づけを行う。具体的には、ブロックセットの前後左右が明確になった時点で、あらかじめ設定した駆動方式に応じて駆動輪、従動輪、操舵輪を決定する。さらに、左右の駆動輪や操舵輪は同じ回転速度および舵角でなければならないという拘束条件を満たすようにグルーピングする。また、仮想世界で表現される3Dオブジェクトの速度や方向転換に対応する好適な速度や方向転換でブロックセットが走るように、ブロックセットの車輪の回転速度や舵角を、3Dオブジェクトの仮想的な速度や方向転換に対応づける。
図30は、3Dオブジェクトの動きをブロックセットに反映させる態様において、3Dオブジェクトとブロックセットの動きの対応を設定する処理手順を示すフローチャートである。この処理は、図19のS50およびS52の処理に対応する。情報処理部30はまず構造解析部22からの情報に基づき、ブロックセットに車輪が装着されていることを検知すると、ブロックセットの前後左右の向きと駆動方式に則り、駆動輪、操舵輪といった車輪の役割を前輪あるいは後輪に割り当てる(S58)。さらに少なくとも駆動輪、操舵輪の役割を割り当てられた平行に並んでいる2輪は1つのグループとすることにより協調動作させる(S60)。
なお平行に並んでいる2輪が1つの車軸で回転する場合は、自ずと協調動作するためS60の処理を省略できる。次に3Dオブジェクトの仮想的な走行を反映させた好適な移動速度や方向転換が得られるようにするための制御パラメータを取得する。ここで制御パラメータは、駆動輪の車軸を回転させるアクチュエータの回転速度や操舵輪の舵角を変化させるアクチュエータの動き量などである。なおS60においてグルーピングされた駆動輪や操舵輪を制御する複数のアクチュエータは、情報処理装置10からの制御信号によって同一の動作となるように制御される。
制御パラメータを取得するため、まずユーザにブロックセットを所定方向に実際に動かしてもらい、その移動量を計測するとともに、そのときの車軸の回転量や舵角を測定する(S62、S64、S66)。ユーザはブロックセットを、別途用意した制御機構により電子的に駆動させてもよいし、本体を手で押すなど人力で動かしてもよい。後者の場合、車軸や舵角を変化させる機構をアクチュエータの制御から解放した状態とする。ブロックセットの移動量はカメラ122の撮影画像やそれから生成した奥行き画像から取得できる。回転量は車輪に備えたロータリーエンコーダからの信号により、舵角は車輪に備えた舵角センサにより取得できる。なおロータリーエンコーダ等のセンサを備えていない場合などは、車輪の直径、移動距離、移動方向に基づき算出してもよい。
そして方向転換を含む移動量に対する実際の回転量および舵角に基づき、当該移動量を得るためのモーターの回転量およびアクチュエータの動き量などの制御量を取得する(S68)。この対応関係を、単位時間あたり、あるいは単位角度あたりの値に変換することにより、移動速度および単位舵角と制御パラメータの値とを対応づける(S70)。ここで移動速度は、ブロックセット自体の好適な移動速度であるが、画面上の3Dオブジェクトと連動させる場合は、仮想世界における移動速度で決定される値である。舵角も同様である。したがってS70の処理によって、3Dオブジェクトの動きをブロックセットの動きに対応づけたことになる。
なお、ブロックセットに接続されている車輪の直径が、当該車輪の識別番号から判明する場合、移動速度と制御パラメータとの対応関係は演算によって求められるため、S62からS68の処理を省略してもよい。またこれまで述べた例では、クレーン車に見立てたブロックセットとクレーン車の3Dオブジェクトを対応づけることを想定していたため、車輪の動きの対応づけとして説明したが、図28で示したフローチャートは、3Dオブジェクトに車輪がなくても同様である。
すなわち3Dオブジェクトが人、動物、虫、車以外の乗り物などであっても、仮想世界での移動をブロックセットの移動に反映させる場合は、図28の処理手順により移動速度や舵角と制御パラメータを対応づけることにより、3Dオブジェクトの仮想的な移動に対応する速度や方向で、ブロックセットを移動させることができる。さらに、3Dオブジェクトの動きを反映させる態様ばかりでなく、単に情報処理装置10で行った処理の結果に応じてブロックセットを移動させる態様にも利用できる。
図31は、上述したブロックセットの車輪に係る設定を、複合リンクへ拡張した場合について説明する図である。図示する複合リンク350は、関節が完全独立でなくリンクが連動する。すなわち複合リンク350の1つの関節を矢印のように動かせば、4つの関節が全て動くことになる(複合リンク352)。このような場合、アクチュエータによって1つの関節のみを動かすことができないため、駆動輪と同様、4つの関節をグルーピングして協調動作させる。ブロックセットに複合リンクを組み入れた場合、ユーザが対応設定画面などにおいて複合リンクの存在を明示するか、ブロックセットの実物における複合リンクを動かすことにより、情報処理部30はその存在を認識する。そして3Dオブジェクトとの動きの対応を設定する際、それに含まれる関節を全てグルーピングする。
以上述べた本実施の形態によれば、自由に組み立てることが可能なブロックを、情報処理装置における処理の入力装置や出力装置として利用する。位置や姿勢を取得するための各種センサや通信機能を有する通信ブロックを用いることにより、組み立て後のブロックの骨格や位置などの詳細を取得する。さらにカメラによる撮影画像など実空間におけるブロックの存在を検出する手段を用いて、組み立て後のブロックの表面形状を取得する。これらの情報を統合することにより、ブロックの一部として、通信機能を持たない非通信ブロックを使用しても、組み立て後のブロックの位置、姿勢、形状を高精度に特定できる。
結果として、ブロックの形状、材料、色などが限定されず、ユーザが自作した物であっても用いることができ、ユーザの目的に適った外観を有する物体を自由に創造することができる。また情報処理装置は、外観がどのようであっても、位置、姿勢、形状を高精度に取得できるため、ユーザが組み立てたり動かしたりする行為を入力情報として、各種情報処理が行える。また情報処理の結果として、組み立てたブロックを動かすことができる。
例えば、組み立てられたブロックと同じ外観の3Dオブジェクトを表示させたり、組み立てられたブロックに対応する、よりリアルな外観の3Dオブジェクトを表示させたりできる。後者の場合、ブロックの部位ごとに3Dオブジェクトのパーツを指定することにより、ユーザが3Dオブジェクト自体を形作ってもよいし、ブロック全体を1つの3Dオブジェクトに対応させてもよい。このとき、連動させるべき関節などの箇所を対応づけることにより、位置の変化のみならず、姿勢や形状の変化をも相互に反映させることができる。対応箇所の設定や動きの対応づけは、ブロックセットと3Dオブジェクトの形状、関節の数、関節の可動角、車輪の協調動作といった拘束条件に基づき設定できる。このような対応づけを情報処理装置が自動で行ったり、ユーザが設定できる環境を提供したりすることにより、ユーザの負担を抑えつつ、実世界と仮想世界とのリンクを自由に作り上げることができる。
以上、本発明を実施の形態をもとに説明した。上記実施の形態は例示であり、それらの各構成要素や各処理プロセスの組合せにいろいろな変形例が可能なこと、またそうした変形例も本発明の範囲にあることは当業者に理解されるところである。
例えば図22で説明した対応箇所設定画面300では、画面上の3Dオブジェクトに対応づける対象としてブロックセットを想定していたが、ブロックセット以外の物、例えばユーザ自身などでも同様に対応づけられる。ユーザと対応づける場合、カメラ122がユーザを撮影し、それに基づき奥行き画像を生成するなどしたうえ、骨格の位置を推定する。骨格の位置はスケルトントラッキングなどの従来技術を適用して追跡できる。そしてユーザが、肩や肘など対応づけたい関節周りに腕などの部位を動かすことにより、情報処理装置10は当該関節をブロックセットの場合と同様に認識する。さらに画面上で3Dオブジェクトの関節を指定することにより、ユーザと3Dオブジェクトの関節を対応づけることができる。
これにより、ユーザの動きに合わせて3Dオブジェクトが動く態様を実現できる。あるいは、ブロックセットを人型に組み立て、本実施の形態のように3Dオブジェクトと対応づけておけば、ユーザの関節とブロックセットの関節が、3Dオブジェクトの関節を介して間接的に対応づけられていることになる。この状態を利用し、本実施の形態における3Dオブジェクトの動きをブロックセットに反映させる態様と組み合わせれば、ユーザの動きに合わせてブロックセットが動く態様も実現できる。
この態様の変形例として、ユーザの像と骨格の位置を示した画像を撮影画像からリアルタイムで生成して対応箇所設定画面に表示し、画面上でユーザの関節と3Dオブジェクトの関節を対応づけるようにしてもよい。このとき、両者を同時に表示してもよいし、交互に表示させて対応を設定する関節の指定を1つ1つ受け付けてもよい。なおこれらの変形例は、ユーザが自分の関節と3Dオブジェクトの関節を対応づけることを前提としているが、3Dオブジェクトが人やロボットなどであり、ユーザの関節との対応が明白である場合は、ユーザによる設定を省略し、情報処理装置が全て設定してもよい。
また、本実施の形態では、車の前後が判明している状態で車輪を車軸に装着することにより、情報処理装置が駆動輪、従動輪、操舵輪の役割を決定した。そして当該役割に応じて、その動作を制御するアクチュエータの動きを切り替えた。この態様を拡張し、接続された物によって動きを切り替えるアクチュエータを備えたブロックを実現してもよい。例えば、車軸と車輪からなる部品を装着したら当該車軸を回転させることによりブロックセットの車を走行させる。カムとバネなどからなる部品を装着したらカムの回転によりバネが解放され仕掛けられていた矢などが放たれる。上述したような関節からなる部品を装着したら、関節として動作させる。
この場合、情報処理装置10は、撮影画像から接続された物の種類を認識し、それに応じた制御信号をブロックセットに送信することにより、アクチュエータの動きを適切に切り替える。このようにすることで、アクチュエータを備えたブロックの汎用性が増し、種類ごとに異なるブロックを準備するより低コストでバリエーションに富んだブロックセットを実現できる。