(57)【要約】【課題】一実施形態は、自然な動きで複数のモーションが繋がるモーションを生成することができる。【解決手段】一実施形態に係るコンピュータにより実行されるモーション生成方法は、コンピュータが、ロボットの動作を規定する複数のサブモーションのうちの第１のサブモーションの後に第２のサブモーションを連結してモーションを生成する場合に、第１のサブモーションの終了側の予備動作に含まれる１以上の第１の姿勢と、第２のサブモーションの開始側の予備動作に含まれる１以上の第２の姿勢とのうちから所定の条件を満たす類似度で類似している第１の姿勢と第２の姿勢とのペアを特定し、ペアの位置で、補完モーションにより第１のサブモーションと第２のサブモーションとを連結してモーションを生成する、ことを含む。【選択図】図３
2020040172.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータにより実行されるモーション生成方法であって、前記コンピュータが、
ロボットの動作を規定する複数のサブモーションのうちの第１のサブモーションの後に第２のサブモーションを連結してモーションを生成する場合に、前記第１のサブモーションの終了側の予備動作に含まれる１以上の第１の姿勢と、前記第２のサブモーションの開始側の予備動作に含まれる１以上の第２の姿勢とのうちから所定の条件を満たす類似度で類似している第１の姿勢と第２の姿勢とのペアを特定し、
前記ペアの位置で、補完モーションにより前記第１のサブモーションと前記第２のサブモーションとを連結して前記モーションを生成する、
ことを含む、モーション生成方法。
【請求項２】
前記所定の条件は、前記ペアとなった第１の姿勢と第２の姿勢との間で前記ロボットが備える関節の関節角の角度差が、角度に関する所定条件を満たす角度差の範囲に収まることである、請求項１に記載のモーション生成方法。
【請求項３】
前記所定の条件を満たす類似度で類似する第１の姿勢と第２の姿勢との複数のペアが特定された場合、前記モーションを生成する処理は、前記複数のペアのうちで、前記ペアとなった第１の姿勢と第２の姿勢が最も類似しているペアの位置で、前記補完モーションにより前記第１のサブモーションと前記第２のサブモーションとを連結する、請求項１又は２に記載のモーション生成方法。
【請求項４】
前記所定の条件を満たす類似度で類似する第１の姿勢と第２の姿勢との複数のペアが特定された場合、前記モーションを生成する処理は、前記第１のサブモーションの終了側の予備動作と、前記第２のサブモーションの開始側の予備動作とを合わせた予備動作の長さが最も短くなるペアの位置で、前記補完モーションにより前記第１のサブモーションと前記第２のサブモーションとを連結する、請求項１又は２に記載のモーション生成方法。
【請求項５】
前記所定の条件は、更に、前記ロボットが備える関節の駆動方向が同じであることを含む、請求項１から４のいずれか１項に記載のモーション生成方法。
【請求項６】
前記所定の条件は、更に、前記ロボットが備える関節の駆動速度が、速度に関する所定条件を満たす速度差の範囲に収まることを含む、請求項１から４のいずれか１項に記載のモーション生成方法。
【請求項７】
前記第２のサブモーションの前記開始側の予備動作の期間を、前記第２のサブモーションの開始端から後側に向かって前記ロボットが備える関節の駆動速度の変化量が所定の条件を満たす変化量を超えて変化した時点に基づいて特定する、ことを更に含む、請求項１から６のいずれか１項に記載のモーション生成方法。
【請求項８】
前記第１のサブモーションの前記終了側の予備動作の期間を、前記第１のサブモーションの終了端から前側に向かって前記ロボットが備える関節の駆動速度の変化量が所定の条件を満たす変化量を超えて変化した時点に基づいて特定する、ことを更に含む、請求項１から７のいずれか１項に記載のモーション生成方法。
【請求項９】
記憶部に記憶されている前記複数のサブモーションのそれぞれの開始側の予備動作及び終了側の予備動作の期間を示す情報に基づいて、前記第１のサブモーションの終了側の予備動作及び前記第２のサブモーションの開始側の予備動作の期間を特定する、ことを更に含む、請求項１から請求項８のいずれか１項に記載のモーション生成方法。
【請求項１０】
ロボットの動作を規定する複数のサブモーションのうちの第１のサブモーションの後に第２のサブモーションを連結してモーションを生成する場合に、前記第１のサブモーションの終了側の予備動作に含まれる１以上の第１の姿勢と、前記第２のサブモーションの開始側の予備動作に含まれる１以上の第２の姿勢とのうちから所定の条件を満たす類似度で類似している第１の姿勢と第２の姿勢とのペアを特定し、
前記ペアの位置で、補完モーションにより前記第１のサブモーションと前記第２のサブモーションとを連結して前記モーションを生成する、
処理を情報処理装置に実行させるモーション生成プログラム。
【請求項１１】
ロボットの動作を規定する複数のサブモーションのうちの第１のサブモーションの後に第２のサブモーションを連結してモーションを生成する場合に、前記第１のサブモーションの終了側の予備動作に含まれる１以上の第１の姿勢と、前記第２のサブモーションの開始側の予備動作に含まれる１以上の第２の姿勢とのうちから所定の条件を満たす類似度で類似している第１の姿勢と第２の姿勢とのペアを特定する特定部と、
前記ペアの位置で、補完モーションにより前記第１のサブモーションと前記第２のサブモーションとを連結して前記モーションを生成する生成部と、
を含む、情報処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、モーション生成方法、モーション生成プログラム、及び情報処理装置に関する。
【背景技術】
【０００２】
作業などに用いるロボットの他に、コミュニケーションやエンターテインメントなどの用途で利用されるロボットが開発されている。例えば、こうしたロボットのモーション作成法として、一連の動作全てを作成する方法と、部分的なモーションのセットを作成しておいて、それを組み合わせてモーションを生成する方法とが知られている。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１１−５６６２４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
しかしながら、複数の部分的なモーションのセットから部分的なモーションを組み合わせてより長いモーションを生成する場合に、生成されたモーションが不自然な動きを示すことがある。
【０００５】
１つの側面では、本発明は、複数の部分的なモーションを組み合わせてモーションを生成する際に、自然な動きで繋がるモーションを生成することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一つの態様のコンピュータにより実行されるモーション生成方法は、コンピュータが、ロボットの動作を規定する複数のサブモーションのうちの第１のサブモーションの後に第２のサブモーションを連結してモーションを生成する場合に、第１のサブモーションの終了側の予備動作に含まれる１以上の第１の姿勢と、第２のサブモーションの開始側の予備動作に含まれる１以上の第２の姿勢とのうちから所定の条件を満たす類似度で類似している第１の姿勢と第２の姿勢とのペアを特定し、ペアの位置で、補完モーションにより第１のサブモーションと第２のサブモーションとを連結してモーションを生成する、ことを含む。
【発明の効果】
【０００７】
自然な動きで複数のモーションが繋がるモーションを生成することができる。
【図面の簡単な説明】
【０００８】
【図１】例示的なモーション生成方法を示す図である。
【図２】実施形態にかかる情報処理装置のブロック構成を例示する図である。
【図３】実施形態に係るサブモーションの連結を説明する図である。
【図４】実施形態に係るサブモーション情報を例示する図である。
【図５】実施形態に係る動作種別情報を例示する図である。
【図６】連結する２つのサブモーションで指定されるロボットの動作を例示する図である。
【図７】サブモーションＡの終了予備動作の姿勢と、サブモーションＢの開始予備動作の姿勢との比較を示す図である。
【図８】第１の実施形態に係る連結ペアの決定処理の動作フローを例示する図である。
【図９】実施形態に係るモーション生成処理の動作フローを例示する図である。
【図１０】第１の実施形態の変形例に係る予備動作及び本動作の期間の特定処理を説明する図である。
【図１１】第１の実施形態の変形例の予備動作及び本動作の期間の特定処理の動作フローを例示する図である。
【図１２】第２の実施形態に係る駆動方向の比較を説明する図である。
【図１３】第２の実施形態に係る駆動方向の比較を説明する別の図である。
【図１４】第２の実施形態に係る連結ペアの特定処理の動作フローを例示する図である。
【図１５】第３の実施形態に係る関節の駆動速度の比較を説明する図である。
【図１６】第３の実施形態に係る連結ペアの特定処理の動作フローを例示する図である。
【図１７】サブモーションの末端が本動作である場合を例示する図である。
【図１８】実施形態に係る情報処理装置を実現するためのコンピュータのハードウェア構成を例示する図である。
【発明を実施するための形態】
【０００９】
以下、図面を参照しながら、本発明のいくつかの実施形態について詳細に説明する。なお、複数の図面において対応する要素には同一の符号を付す。
【００１０】
上述のように、ロボットのモーション作成には、部品となる複数のモーションを含むモーションのセットを作成しておいて、それに含まれるモーションを組み合わせて目的に合わせたロボットのモーションを作成する方法がある。部品となるモーションは、ロボットの形態にもよるが、例えば、人型のロボットであれば、手で右方向を指示する動作、お辞儀する動作、手を振る動作、首を振る動作などユーザとのコミュニケーションに利用可能なジェスチャーを含んでよい。
【００１１】
そして、こうした動作を組み合わせることで、例えば、ユーザとのコミュニケーションをとるための様々なモーションを生成することができる。例えば、ユーザにお別れを述べる際には、お辞儀するジェスチャーに続けて、手を振るジェスチャーを組み合わせてお別れの際の挨拶を表現するモーションを生成することができる。なお、以下では、部品となるモーションを、サブモーションと呼ぶことがあり、一方、サブモーションを組み合わせて生成するモーションを、単にモーションと呼ぶことがある。
【００１２】
図１は、サブモーションを用いた例示的なモーション生成方法を示す図である。図１は、サブモーションＡ及びサブモーションＢの２つのサブモーションを繋いでモーションを生成する場合を例示している。
【００１３】
図１（ａ）は、サブモーションをそのまま繋いでモーションを生成する方法を例示している。例えば、ロボットのサブモーションの開始時と終了時に同じ姿勢（以下では、ホームポジションと呼ぶことがある）をとるように、各サブモーションを作成する。ホームポジションとしては、複数のサブモーションを連結する姿勢として適した姿勢が用いられてよい。例えば、ホームポジションは、バランスのよい重心の位置を有する姿勢であってよく、人型のロボットであれば、腕などを体の縦の軸に近い位置に仕舞った小さい姿勢など、気を付けに近い姿勢であってよい。このように開始時の姿勢と終了時の姿勢に同じホームポジションの姿勢を用いることで、サブモーションをそのまま繋いだ場合にも、同じ姿勢で繋ぐことができる。
【００１４】
しかしながら、この場合、手を振るなどのジェスチャーを開始する位置までホームポジションから姿勢を変えたり、動作後にホームポジションまで姿勢を戻したりするために時間がかかることがある。その結果、サブモーションを組み合わせて生成されたモーションが間延びしていたり、テンポが悪かったりしてしまうことがある。また、サブモーションの繋がりの位置で毎回ホームポジションに戻すことで、ユーザに不自然さを感じさせたり、単調な動作と感じさせたりすることがある。
【００１５】
また、サブモーションの開始時と終了時の姿勢としてホームポジションを用いず、任意の異なる姿勢を用いるようにすると、例えば、図１（ｂ）に示すように、各サブモーションの全体の動作時間は短くなる。しかしながら、サブモーションＡの終了姿勢と、サブモーションＢの開始姿勢とが異なるため、連結の際に間に補完モーションなどを挟み込んで繋ぐことになる。この場合、前のサブモーションの終了姿勢や、後ろのサブモーションの開始姿勢などによっては、補完モーションが長くなってしまったりすることがある。その結果、生成されたモーションが間延びしたり、或いは動作のテンポが悪くなってしまったりすることがある。そのため、より自然な動作でサブモーションを連結し、モーションを生成することのできる技術の提供が望まれている。なお、自然な動作とは、例えば、ユーザが見て、サブモーションの繋がりの位置が認識しにくく、不自然な動きと感じ難い動作であってよい。一例として、自然な動作とは、動きの急激な速度の変動や、急激な駆動方向の変動が抑えられているロボットの動作であってよい。或いは、自然なモーションとは、例えば、間延びした動作となっておらず、テンポがよく動作が滑らかに進行するモーションであってよい。以下、実施形態を説明する。
【００１６】
図２は、実施形態にかかる情報処理装置２００の機能ブロック構成を例示する図である。情報処理装置２００は、例えば、制御部２０１及び記憶部２０２を含んでいる。制御部２０１は、例えば、特定部２１１、及び生成部２１２などとして動作してよい。情報処理装置２００の記憶部２０２は、例えば、後述するサブモーション情報４００、及び動作種別情報５００などの情報を記憶している。これらの各部の詳細及び記憶部２０２に格納されている情報の詳細については後述する。
【００１７】
図３は、実施形態に係るサブモーションの連結を説明する図である。図３に示す様に、実施形態では、情報処理装置２００の制御部２０１は、サブモーションを予備動作と、本動作とに分ける（図３の（１））。本動作とは、例えば、そのサブモーションで表現したい動作であってよく、ユーザとのコミュニケーションで意味をもつジェスチャーを実行する動作部分を含んでよい。ジェスチャーは、例えば、人に何かを伝えるためにする身振り手振りなどであってよい。本動作は、例えば、手を振ったり、方向を指示したりなどの動作を含む。また、予備動作とは、例えば、本動作の開始位置の姿勢まで別な姿勢から姿勢を移動させたり、本動作の終了位置から安定した姿勢まで姿勢を移動させたりなど、本動作の実行のための予備的な動作であってよい。例えば、サブモーションが手を振る動作であれば、予備動作は、手を振り始める開始位置まで腕を移動させる動作であってよい。
【００１８】
続いて、情報処理装置２００の制御部２０１は、連結する前側のサブモーション（ここでは、サブモーションＡ）の動作終わりの予備動作と、連結する後側のサブモーション（ここでは、サブモーションＢ）の動作始めの予備動作との姿勢を比較する。そして、制御部２０１は、連結する前側のサブモーションの動作終わりの予備動作と、連結する後側のサブモーションの動作始めの予備動作との間で、類似した姿勢をとっているそれぞれのサブモーションの時刻を連結ペアとして特定する（図３の（２））。なお、動作終わりの予備動作を、以下では、終了予備動作又は終了側の予備動作と呼ぶことがある。また、動作終わりの予備動作に含まれる１以上の姿勢を、１以上の第１の姿勢と呼ぶことがある。動作始めの予備動作を、以下では、開始予備動作又は開始側の予備動作と呼ぶことがある。動作始めの予備動作に含まれる１以上の姿勢を、１以上の第２の姿勢と呼ぶことがある。連結ペアの特定の更なる詳細については、後述する。
【００１９】
次に、情報処理装置２００の制御部２０１は、例えば、特定した連結ペアの位置で２つのサブモーションを補完モーションで連結して、モーションを生成する（図３の（３））。この様に、類似した姿勢をとる連結ペアの位置でサブモーションを結びつけることで、サブモーションを自然な繋がりでスムーズに連結することができる。また、連結の際に、連結ペアの位置から外側にあるサブモーションの末端部分は破棄される。そのため、それぞれのサブモーションの予備動作が短くなり、サブモーションの連結の際の間延びを抑制でき、テンポよく繋ぐことができる。そのため、実施形態によれば、生成されたモーションで動作するロボットからユーザが受ける違和感を抑えることが可能である。
【００２０】
図４は、実施形態に係るロボットのサブモーションを規定するサブモーション情報４００を例示する図である。なお、図４に示すサブモーション情報４００の例は、テーブル形式でサブモーションＡに対する時刻と関節角とが対応付けてられているが、実施形態はこれに限定されるものではない。例えば、これらの時刻と関節角とを対応付ける形式であれば、テキストデータなどその他の形式でサブモーション情報４００に含まれる情報の対応付けが記述されてもよい。
【００２１】
サブモーション情報４００では、種別と、時刻と、姿勢の情報とが対応付けられている。種別は、サブモーションを識別する識別子である。時刻は、一例では、種別で識別されるサブモーションの実行の開始時点からの経過時刻であってよい。また、姿勢は、例えば、エントリの時刻におけるロボットの姿勢を表す情報であってよい。一例では、姿勢は、ロボットが備える各関節の角度であってよい。図４の例に示すように、ロボットが備える足元関節、右腕関節、左腕関節など、ロボットの形状に応じた関節の関節角が登録されている。サブモーション情報４００に示される各時刻における関節の角度に従って、ロボットの関節を動かすことで、ロボットを動作させることができる。
【００２２】
図５は、実施形態に係る動作種別情報５００を例示する図である。図５に示す例では、動作種別情報５００には、識別情報、種別、及び期間を対応づけたエントリが登録されている。識別情報は、エントリで予備動作や本動作の期間を規定するサブモーションを識別するための識別情報である。また、種別は、エントリが示す期間が、予備動作を示すのか、それとも本動作の示すのかを表す情報である。例えば、“Ｒ”は予備動作を示し、“Ｏ”は本動作を示してよい。期間は、例えば、エントリの種別で示す動作が実行される期間を示し、開始の時刻と終了の時刻を含む。例えば、情報処理装置２００の制御部２０１は、動作種別情報５００のエントリの識別情報を用いて、エントリと対応するサブモーション情報４００を特定することができる。制御部２０１は、動作種別情報５００のエントリの種別と期間の情報から、サブモーション情報４００で規定されるロボットの動作のうち、予備動作の期間と、本動作の期間とを特定することができる。
【００２３】
なお、図５に示す動作種別情報５００の例では、テーブル形式で情報が対応づけられているが、実施形態はこれに限定されるものではなく、これらの情報を対応付ける形式であれば、テキストデータなどその他の形式で記述されてもよい。
【００２４】
続いて、連結する対象の２つのサブモーションからの連結ペアとなる時刻を特定する処理について説明する。
【００２５】
（第１の実施形態）
第１の実施形態では、類似度の高い姿勢を特定し、連結ペアとする場合の例を説明する。
【００２６】
図６は、連結する２つのサブモーションで指定されるロボット６００の動作を例示する図である。図６の上段には、サブモーションＡのロボット６００の動作が示されている。図６の下段には、サブモーションＢのロボット６００の動作が示されている。以下では、サブモーションＡの後に、サブモーションＢを連結する場合を例に、姿勢の類似度に基づく連結ペアの特定について説明する。なお、制御部２０１は、サブモーションにおける開始予備動作、本動作、及び終了予備動作の期間を、サブモーション情報４００及び動作種別情報５００を参照することで特定することができる。
【００２７】
サブモーションＡでは開始予備動作で、ロボット６００は左手を持ち上げる（図６の（１））。続いて、本動作でロボット６００は、左手を振る（図６の（２））。その後、終了予備動作で、ロボット６００は左手を下す（図６の（３））。
【００２８】
また、サブモーションＢでは開始予備動作で、ロボット６００は足元の関節を左に倒して身体を左に傾けながら左手を持ち上げる（図６の（４））。続いて、本動作でロボット６００は、手を小さく繰り返し動かして方向指示する（図６の（５））。その後、終了予備動作で、ロボット６００は身体の傾きを戻しながら左手を下す（図６の（６））。
【００２９】
そして、実施形態では制御部２０１は、連結する２つのサブモーションの前側のサブモーションの終了予備動作と、後側のサブモーションの開始予備動作との間で、類似姿勢を探索する。第１の実施形態では、制御部２０１は、前側のサブモーションの終了予備動作の姿勢と、後側のサブモーションの開始時のサブモーションの姿勢とを比較し、各関節の角度の差が小さい姿勢を類似姿勢と判定する。一例では、制御部２０１は、例えば、前側のサブモーションの終了予備動作の姿勢と、後側のサブモーションの開始時のサブモーションの姿勢とを比較し、関節の角度差が、角度に関する所定条件を満たす角度差の範囲に収まる姿勢を類似姿勢と判定してよい。
【００３０】
例えば、制御部２０１は、サブモーションＡの終了予備動作に含まれる各姿勢の各関節の角度と、サブモーションＢの開始予備動作の各姿勢の各関節の角度とを、姿勢ごとに比較する。一例では、制御部２０１は、サブモーションＡの終了予備動作の姿勢と、サブモーションＢの開始予備動作の姿勢との間で各関節ごとに関節角の差をとり、得られた各関節の角度差を合計した積算角度差が最も小さくなるペアを最も近い姿勢のペアとしてもよい。なお、制御部２０１は、サブモーションの予備動作に含まれる各姿勢を、そのサブモーションのサブモーション情報４００と動作種別情報５００を参照して取得してよい。
【００３１】
図７は、サブモーションＡの終了予備動作の４つの姿勢（時刻Ｔが、１．８秒、２．０秒、２．２秒、２．４秒）と、サブモーションＢの開始予備動作の時刻Ｔ：０．２秒における姿勢を比較している。例えば、サブモーションＡの終了予備動作の時刻Ｔ：１．８秒の姿勢と、サブモーションＢの開始予備動作の時刻Ｔ＝０．２秒の姿勢とで各関節毎に角度差を求めると、結果は、右腕関節角差が０度、左腕関節角差が７０度、足元関節角差が３度である。角度差を合計した積算角度差は７３度である。なお、図７の例では、右腕関節は動かしていないため、表記を省略している。同様にサブモーションＡの終了予備動作の時刻Ｔが、２．０秒、２．２秒、及び２．４秒のそれぞれの姿勢と、サブモーションＢの開始予備動作の時刻Ｔ：０．２秒を比較することで、積算角度差により姿勢の類似度を評価することができる。例えば、図７では、制御部２０１は、サブモーションＡの終了予備動作の時刻Ｔ：２．２秒と、サブモーションＢの開始予備動作の時刻Ｔ：０．２秒の積算角度差が最も小さい３度で、姿勢が最も似ている姿勢ペアとして特定することができる。
【００３２】
続いて、制御部２０１は、各姿勢のペアごとに求めた姿勢の類似度（例えば、積算角度差）が、所定の条件を満たす類似度で類似しているか否かを判定する。所定の条件は、例えば、姿勢のペアとしたサブモーションＡの終了予備動作の姿勢とサブモーションＢの開始予備動作の姿勢との間でロボットが備える関節の関節角の角度差が、角度に関する所定条件を満たす角度差の範囲に収まることであってよい。例えば、制御部２０１は、積算角度差が所定の閾値以下で似ているか否かを判定する。所定の閾値は、例えば、５度〜３０度などの範囲の角度であってよく、一例では１５度であってよい。図７の例では、制御部２０１は、１５度以下の積算角度差を有する姿勢ペアとして、サブモーションＡ：２．２秒とサブモーションＢ：０．２秒の姿勢のペアと、サブモーションＡ：２．４秒とサブモーションＢ：０．２秒の姿勢のペアを特定する。
【００３３】
続いて、制御部２０１は、所定の閾値以下の積算角度差で類似している姿勢のペアのうちから、連結したときに予備動作の期間が最も短くなるペアを、サブモーションの連結位置として用いる連結ペアとして特定する。例えば、図７の例では、サブモーションＡ：２．２秒とサブモーションＢ：０．２秒の姿勢ペアの方が、サブモーションＡ：２．４秒とサブモーションＢ：０．２秒の姿勢ペアよりも、破棄される予備動作の期間が長く、予備動作の期間が短くなる。そのため、制御部２０１は、サブモーションＡ：２．２秒とサブモーションＢ：０．２秒の姿勢ペアを連結ペアとして特定してよい。なお、実際には、制御部２０１は、サブモーションＢの時刻：０．４秒についても、サブモーションＡの終了予備動作の各姿勢と積算角度差を求める。そして、制御部２０１は、所定の閾値を満たす積算角度差を有し、且つ、より予備動作の期間が短くなる姿勢ペアがあれば、その姿勢ペアの時刻を連結ペアとして決定してよい。
【００３４】
別の実施形態では、制御部２０１は、予備動作の期間が最も短くなるペアの代わりに、姿勢が最も類似しているペアを連結ペアとして決定してもよい。
【００３５】
以上で述べた様に、姿勢の類似度に基づいて特定された類似姿勢のペアの位置でサブモーション連結するため、自然な動作でサブモーションを連結することができる。
【００３６】
なお、例えば、サブモーションＡの手を振る本動作や、サブモーションＢの方向を指示する本動作中でサブモーションを連結してしまうと、それらの動作で表されるジェスチャーが伝わりにくくなる恐れがある。そのため、上記の実施形態に示す様に、予備動作期間を特定し、予備動作期間の中で連結位置を特定することは好ましい。
【００３７】
図８は、第１の実施形態に係る連結ペアの特定処理の動作フローを例示する図である。図８は、例えば、連結ペアの特定処理の実行指示が入力されると開始してよい。なお、以下では、連結する２つのサブモーションの前側をサブモーションＡとし、後側をサブモーションＢとする場合を例に説明を行う。
【００３８】
ステップ８０１（以降、ステップを“Ｓ”と記載し、例えば、Ｓ８０１と表記する）において制御部２０１は、サブモーションＡの終了時刻：Ｔ１ＬａｓｔをＴ１に設定する。
【００３９】
Ｓ８０２において制御部２０１は、サブモーションＡの時刻Ｔ１における各関節の関節角を、時刻Ｔ１と対応付けて記憶部２０２にキャッシュする。
【００４０】
Ｓ８０３において制御部２０１は、Ｔ１を１つ前の姿勢の時刻に変更する。例えば、制御部２０１は、サブモーション情報４００を参照し、現在の時刻Ｔ１の１つ前の姿勢が登録されている時刻に、Ｔ１を更新する。なお、別の実施形態では、制御部２０１は、例えば、現在の時刻Ｔ１から所定時間前の時刻にＴ１を更新してよい。
【００４１】
Ｓ８０４において制御部２０１は、更新後の時刻Ｔ１が、サブモーションＡの終了予備動作の範囲内か否かを判定する。例えば、制御部２０１は、動作種別情報５００を参照して、サブモーションＡの終了予備動作の時刻範囲を特定し、その時刻範囲内に時刻Ｔ１が収まっているか否かを判定してよい。時刻Ｔ１が終了予備動作の範囲内である場合（Ｓ８０４がＹｅｓ）、フローはＳ８０２に戻り、更新したＴ１について処理を繰り返す。一方、時刻Ｔ１が終了予備動作の範囲内でない場合（Ｓ８０４がＮｏ）、フローはＳ８０５に進む。
【００４２】
Ｓ８０５において制御部２０１は、後側のサブモーションＢの開始予備動作の開始時刻：０．０を時刻Ｔ２に設定する。
【００４３】
Ｓ８０６において制御部２０１は、サブモーションＢの時刻Ｔ２における各関節の関節角と、記憶部２０２にキャッシュしたサブモーションＡの終了予備動作の期間における各時刻ごとに、各関節の関節角との間で、積算角度差を求める。
【００４４】
Ｓ８０７において制御部２０１は、所定の条件を満たす類似度で類似している時刻Ｔ１と時刻Ｔ２の姿勢ペアを記憶部２０２に記録する。例えば、制御部２０１は、所定の閾値以下の積算角度差を有する時刻Ｔ１と時刻Ｔ２の姿勢ペアを記憶部２０２に記録してよい。
【００４５】
Ｓ８０８において制御部２０１は、Ｔ２を１つ後の姿勢の時刻に更新する。例えば、制御部２０１は、サブモーションＢのサブモーション情報４００を参照し、現在の時刻Ｔ２の１つ後の姿勢が登録されている時刻に、Ｔ２を更新する。なお、別の実施形態では、制御部２０１は、例えば、現在の時刻Ｔ２から所定時間後の時刻にＴ２を更新してよい。
【００４６】
Ｓ８０９において制御部２０１は、更新後の時刻Ｔ２が、サブモーションＢの開始予備動作の範囲内か否かを判定する。例えば、制御部２０１は、動作種別情報５００を参照して、サブモーションＢの開始予備動作の時刻範囲を特定し、その時刻範囲内に時刻Ｔ２が収まっているか否かを判定してよい。時刻Ｔ２が開始予備動作の範囲内である場合（Ｓ８０９がＹｅｓ）、フローはＳ８０６に戻り、更新したＴ２について処理を繰り返す。一方、時刻Ｔ２が開始予備動作の範囲内でない場合（Ｓ８０９がＮｏ）、フローはＳ８１０に進む。
【００４７】
Ｓ８１０において制御部２０１は、記憶部２０２に記憶された所定の条件を満たす類似度で類似していると判定されている時刻Ｔ１と時刻Ｔ２の姿勢ペアのうちから、予備動作の期間が最も短くなるペアを連結ペアとして特定し、本動作フローは終了する。例えば、制御部２０１は、サブモーションＡの終了予備動作と、サブモーションＢの開始予備動作との和が最も小さくなる時刻Ｔ１と時刻Ｔ２のペアを、連結ペアとして特定してよい。それにより、類似姿勢を繋いで滑らかな動作を実現しつつも、予備動作期間を短くし、テンポの良いモーションを生成することができる。なお、別の実施形態では、制御部２０１は、積算角度差が最小だった時刻Ｔ１と時刻Ｔ２のペアを、連結ペアとして特定してもよい。
【００４８】
以上で述べた様に、図８の動作フローによれば、２つのサブモーションを連結する際に繋ぐ位置として、類似した姿勢のペアを特定することができる。また、類似した姿勢のペアのうちから予備動作が短くなるペアを選択することで、サブモーションをテンポよく繋ぐことが可能になる。
【００４９】
なお、例えば、サブモーションの開始時及び終了時に、複数のサブモーションで共通するホームポジションに戻るようにすることで、所定の条件を満たす類似度で類似していると判定される姿勢ペアを少なくとも１つは見つけられるようにすることが可能である。
【００５０】
また、上述の実施形態では、２つの姿勢の類似度を、各関節の関節角の差分を積算した積算角度差を用いて評価する例を述べたが、実施形態はこれに限定されるものではない。別の実施形態では、制御部２０１は、比較する対象の２つの姿勢の間でロボットが備える関節の関節角の差分をとって得た角度差が、所定の条件を満たす角度差の範囲内に収まる場合に、姿勢が所定の条件を満たす類似度で類似していると判定してよい。例えば、制御部２０１は、各関節の関節角の差分を取り、差分の最も大きかった関節の角度差が、所定の閾値以下である場合に、姿勢が所定の条件を満たす類似度で類似していると判定してよい。
【００５１】
図９は、実施形態に係るモーション生成処理の動作フローを例示する図である。例えば、制御部２０１は、モーション生成処理の実行指示が入力されると図９の動作フローを開始してよい。
【００５２】
Ｓ９０１において制御部２０１は、上述のＳ８１０で特定した連結ペアに基づいて、前側のサブモーションの時刻Ｔ１における姿勢と、後側のサブモーションの時刻Ｔ２における姿勢とを取得する。
【００５３】
Ｓ９０２において制御部２０１は、前側のサブモーションの時刻Ｔ１における姿勢と、後側のサブモーションの時刻Ｔ２における姿勢とを繋ぐ補完モーションを生成する。例えば、制御部２０１は、双方の姿勢を繋ぐ動作を線形に補完するように補完モーションを生成してよい。なお、補完の際の関節を動かす速度は、所定の速度であってよい。例えば、所定の速度は、前側のサブモーションの本動作における関節の移動速度を代表する代表値であってよい。別の例では、所定の速度は、後側のサブモーションの本動作における関節の移動速度を代表する代表値であっても、又は、前側のサブモーションと後側のサブモーションの両方の本動作における関節の移動速度を代表する代表値であってもよい。なお、代表値は、例えば、本動作期間での関節の駆動速度を基に求めた、平均値、中央値、最頻値などの統計値であってよい。或いは、所定の速度は、連結するときにユーザに指定させてもよい。
【００５４】
Ｓ９０３において制御部２０１は、前側のサブモーションの時刻Ｔ１の姿勢と、後側のサブモーションの時刻Ｔ２の姿勢とを補完モーションでつないでモーションを生成し、本動作フローは終了する。
【００５５】
図９の動作フローにより、滑らかに動作するモーションを生成することが可能である。なお、別の実施形態では、図９の動作フローはＳ８１０の処理に続けて実行されてもよい。
【００５６】
（第１の実施形態の変形例）
続いて、第１の実施形態の変形例を説明する。上述の実施形態では、予備動作を動作種別情報５００に予め規定しておく例を述べた。しかしながら、実施形態はこれに限定されるものではなく、制御部２０１が、サブモーション情報４００に規定された動作から予備動作の領域を特定してもよい。
【００５７】
例えば、制御部２０１は、最初に関節の駆動方向が変わる（または止まる）時点から所定の条件を満たす時刻を本動作の開始時刻とする（開始時ルール）。開始時ルールの所定の条件は、一例では、所定時間前（例えば、０．２秒など）であってよく、別の例では、サブモーション情報４００に規定される１つ前の姿勢の時刻であってよい。
【００５８】
また、制御部２０１は、例えば、最後に関節の駆動方向が変わる（または止まる）時点から所定の条件を満たす時刻を本動作の終了時刻とする（終了時ルール）。終了時ルールの所定の条件は、例えば、所定時間後（例えば、０．２秒など）であってよく、別の例では、サブモーション情報４００に規定される１つ後の姿勢の時刻であってよい。
【００５９】
図１０は、第１の実施形態の変形例に係る予備動作及び本動作の期間の特定処理を説明する図である。まず、本動作の開始時刻の特定について説明する。制御部２０１は、例えば、サブモーション情報４００に規定されている動きを参照し、ロボット６００に備えられたいずれかの関節で最初に駆動方向が変わる時点を特定する。図１０の上段のサブモーションＡでは、制御部２０１は、最初に左腕関節の駆動方向が変わる時点である時刻：１．０秒を特定する。そして、制御部２０１は、例えば、時刻：１．０秒から０．２秒前の０．８秒を本動作の開始時刻として特定する。また、制御部２０１は、本動作の開始時刻として特定された０．８秒の１つ前の姿勢の０．６秒から開始時刻：０．０秒までの期間を開始予備動作の期間として特定してよい。
【００６０】
また、本動作の終了時刻を特定する場合、制御部２０１は、例えば、サブモーション情報４００に規定されている動きを参照し、ロボット６００に備えられたいずれかの関節で最後に駆動方向が変わる時点を特定する。図１０の上段のサブモーションＡでは、制御部２０１は、時刻：１．４秒を最後に左腕関節の駆動方向が変わる時点として特定する。そして、制御部２０１は、時刻：１．４秒から０．２秒後の１．６秒を本動作の終了時刻として特定する。また、制御部２０１は、本動作の終了時刻として特定された１．６秒の１つ後の姿勢の１．８秒から終了時刻：２．４秒までの期間を終了予備動作の期間として特定してよい。
【００６１】
同様に、図１０の下段のサブモーションＢで、本動作の開始時刻を特定する場合、制御部２０１は、時刻：０．４秒を最初に足元関節が停止する時点として特定する。足元関節の角度は、０．４秒と次の０．６秒で同じであるため、制御部２０１は、足元関節の停止を検出することができる。そこで、制御部２０１は、時刻：０．４秒の０．２秒前の０．２秒を本動作の開始時刻として特定する。また、制御部２０１は、本動作の開始時刻として特定された０．２秒の１つ前の姿勢の０．０秒を開始予備動作の期間として特定してよい。
【００６２】
また、本動作の終了時刻を特定する場合、制御部２０１は、時刻：２．４秒を最後に足元関節が停止する時点として特定する。足元関節の角度は、２．４秒と前の２．２秒で同じであるため、制御部２０１は、足元関節の停止を特定することができる。そこで、制御部２０１は、時刻：２．４秒から０．２秒後の２．６秒を本動作の終了時刻として特定する。また、制御部２０１は、本動作の終了時刻として特定された２．６秒の１つ後の姿勢の２．８秒を終了予備動作の期間として特定してよい。
【００６３】
なお、図１０の下段のサブモーションＢでは、例えば、最初に駆動方向が変わる時点として、０．６秒で左腕関節の駆動方向が変わっているが、それよりも前の０．４秒に足元関節が停止しているため、足元関節に基づいて本動作の開始時刻が特定されている。本動作の終了時刻についても同様に、例えば、最後に駆動方向が変わる時点として、２．２秒で左腕関節の駆動方向が変わっているが、それよりも後の２．４秒に足元関節が停止しているため、足元関節に基づいて本動作の終了時刻が特定されている。
【００６４】
例えば、以上で述べた様に、動作種別情報５００を用いなくても、サブモーション情報４００の情報から予備動作を特定することが可能である。
【００６５】
図１１は、以上で述べた、第１の実施形態の変形例の予備動作及び本動作の期間の特定処理の動作フローを例示する図である。制御部２０１は、例えば、サブモーション情報４００に対する予備動作期間の特定処理の実行指示を受信すると、図１１の動作フローを開始してよい。
【００６６】
Ｓ１１０１において制御部２０１は、指定されたサブモーション情報４００を参照し、最初にいずれかの関節の駆動方向が変わる（または止まる）時点を特定する。
【００６７】
Ｓ１１０２において制御部２０１は、特定した時点に基づいて、本動作の開始時刻を特定してよい。例えば、制御部２０１は、特定した時点から所定の条件を満たす時刻を本動作の開始時刻として特定する。所定の条件を満たす時刻は、例えば、Ｓ１１０１で特定した時点の所定時間（例えば、０．２秒）前の時刻であってよい。或いは、所定の条件を満たす時刻は、例えば、サブモーション情報４００に登録されている時系列の複数の姿勢のうち、Ｓ１１０１で特定した時点の１つ前の姿勢が登録されている時刻であってよい。
【００６８】
Ｓ１１０３において制御部２０１は、指定されたサブモーション情報４００を参照し、最後にいずれかの関節の駆動方向が変わる（または止まる）時点を特定する。
【００６９】
Ｓ１１０４において制御部２０１は、特定した時点に基づいて、本動作の終了時刻を特定する。例えば、制御部２０１は、特定した時点から所定の条件を満たす時刻を本動作の終了時刻として特定してよい。所定の条件を満たす時刻は、例えば、Ｓ１１０３で特定した時点の所定時間（例えば、０．２秒）後の時刻であってよい。或いは、所定の条件を満たす時刻は、例えば、サブモーション情報４００に登録されている時系列の複数の姿勢のうち、Ｓ１１０３で特定した時点の姿勢の１つ後の姿勢が登録されている時刻であってよい。
【００７０】
Ｓ１１０５において制御部２０１は、本動作の期間に基づいて、開始予備動作及び終了予備動作を特定する。例えば、制御部２０１は、本動作の開始時刻よりも前を開始予備動作として特定し、及び本動作の終了時刻よりも後を終了予備動作として特定し、本動作フローは終了する。
【００７１】
図１１の動作フローによれば、動作種別情報５００を用いなくても、サブモーション情報４００の情報から本動作及び予備動作の期間を特定することができる。
【００７２】
なお、サブモーション情報４００からの予備動作期間の特定は、上記の例に限定されるものでは無く、その他の手法が用いられてもよい。例えば、別の実施形態では、制御部２０１は、ロボット６００が所定の誤差範囲内で等速に動作している区間を予備動作として抽出してもよい。一例では、制御部２０１は、ロボット６００が備える関節の駆動速度の変化量が、所定の条件を満たす変化量を超えて変化した時点に基づいて、予備動作の期間を特定する。
【００７３】
例えば、制御部２０１は、上述のＳ１１０１において、サブモーションの開始時刻から後ろに向かって順に、隣接する姿勢との各関節の関節角の差を算出する。そして、制御部２０１は、得られた各関節の差を合算して積算角度差を求め、積算角度差が、一つ前の積算角度差に対して３０％以上多く変動した場合に、その時刻をＳ１１０１で特定する時点として用いてよい。また、別の実施形態では更に、制御部２０１は、３０％を超えて変動した時刻の後ろの積算角度差が、３０％を超えて変動した時刻よりも前の積算角度差の平均値の１０％以上多く変動しているか確認する。そして、制御部２０１は、１０％以上多く変動している場合に、その時刻をＳ１１０１で特定する時点として用いてよい。
【００７４】
同様に、例えば、制御部２０１は、上述のＳ１１０３において、サブモーションの終了時刻から前側に向かって順に、隣接する姿勢との各関節の角度差を算出する。そして、制御部２０１は、得られた各関節の差を合算して積算角度差を求め、積算角度差が、一つ後の積算角度差に対して３０％以上多く変動した場合に、その時刻をＳ１１０３で特定した時点として用いてよい。また、別の実施形態では更に、制御部２０１は、３０％を超えて変動した時刻の前側の積算角度差が、３０％を超えて変動した時刻よりも後の積算角度差の平均値の１０％を超えて多く変動しているか確認する。そして、制御部２０１は、３０％を超えて変動した時刻の前側の積算角度差が、３０％を超えて変動した時刻よりも後の積算角度差の平均値の１０％を超えて多く変動している場合に、その時刻をＳ１１０３で特定する時点として用いてよい。なお、閾値として用いる積算角度差のパーセンテージは例示であり、例えば、５％から５０％の範囲のパーセンテージなど、その他のパーセンテージが閾値として用いられてよい。
【００７５】
更に別の実施形態では、制御部２０１は、例えば、サブモーションの開始から所定の時間の期間と、終了から前側に所定の時間の期間とを、予備動作の期間として特定してもよい。以上で述べたように、実施形態によれば様々な手法を用いて、サブモーション情報４００から予備動作の期間を特定することができる。
【００７６】
（第２の実施形態）
続いて、第２の実施形態を説明する。第１の実施形態では、連結ペアを姿勢の類似度（各関節の関節角の類似度）に基づいて特定する例を述べた。第２の実施形態では、更に、ロボットの動作の駆動方向に基づいて連結ペアを特定する例を述べる。
【００７７】
図１２及び図１３は、第２の実施形態に係る連結ペアの特定処理を説明する図である。図１２は、図７で述べた姿勢の比較に、更に関節の回転方向を記載している。また、図１２の例では、サブモーションＢの開始予備動作及び終了予備動作の期間が図７で述べた例よりも長くなるように、動作種別情報５００において予備動作期間が指定されている。
【００７８】
サブモーションＡの時刻：２．２秒と時刻：２．４秒の姿勢は、図７で述べた様に、サブモーションＢの時刻：０．２秒の姿勢と、積算角度差が所定の閾値以内で類似する姿勢をしている。しかしながら、図１２に示すように、サブモーションＡの終了予備動作は、左腕を正の方向（例えば、時計回り）に回しており、一方、サブモーションＢの時刻：０．２秒の姿勢は、左腕を不の方向（例えば、反時計回り）に回転させている最中にある。そのため、サブモーションＡの時刻：２．２秒と時刻：２．４秒の姿勢と、サブモーションＢの時刻：０．２秒の姿勢とを連結ペアとして用いてサブモーションを連結すると、連結により回転方向を変えることになる。その結果、不自然なロボット６００の動作となることがある。そのため、第２の実施形態では、姿勢が似ており、且つ、関節の駆動方向が同じである姿勢を連結ペアの姿勢として探索する。なお、各関節の駆動方向は、サブモーション情報４００において駆動方向を特定する対象とする時刻の姿勢と、その時刻の前又は後の姿勢との間での関節角の変化量から特定することができる。
【００７９】
図１３では、サブモーションＡの終了予備動作に含まれる４つの姿勢と、サブモーションＢの開始予備動作の時刻０．８秒の姿勢とを比較している。図１３に示す様に、サブモーションＢの開始予備動作の時刻０．８秒において左腕関節の回転方向は正の方向であり、サブモーションＡの終了予備動作の左腕関節の回転方向と同じである。また、サブモーションＢの開始予備動作の時刻０．８秒の姿勢の各関節の関節角を用いて求めた積算角度差は、サブモーションＡの時刻：１．８秒と、時刻：２．０秒で所定の閾値（例えば、１５度など）以下の角度になっている。この場合、例えば、左腕関節の回転方向が同じで、且つ、予備動作が短くなるように、制御部２０１は、サブモーションＡの時刻：１．８秒と、サブモーションＢの時刻：０．８秒とを連結ペアとして決定してよい。
【００８０】
以上のように、ロボット６００の駆動方向を合わせて予備動作を連結することで、動作が滑らかに繋がり、ユーザが自然な動作と感じるモーションを生成することができる。
【００８１】
図１４は、第２の実施形態に係る連結ペアの特定処理の動作フローを例示する図である。制御部２０１は、例えば、連結ペアの特定処理の実行指示が入力されると、図１４の動作フローを開始してよい。
【００８２】
Ｓ１４０１及びＳ１４０２は、図８のＳ８０１及びＳ８０２の処理とそれぞれ対応していてよく、制御部２０１は、例えば、Ｓ１４０１及びＳ１４０２において、Ｓ８０１及びＳ８０２の処理と同様の処理を実行してよい。
【００８３】
Ｓ１４０３において制御部２０１は、時刻Ｔ１の各関節の駆動方向を特定し、特定した関節ごとの駆動方向を時刻Ｔ１と対応づけてキャッシュする。例えば、制御部２０１は、時刻：Ｔ１からΔＴ秒前又は後の姿勢を取得し、その姿勢と時刻Ｔ１での姿勢との比較から、関節の回転方向を取得してよい。なお、ΔＴは、例えば、０．２秒など所定の時間であってよい。例えば、時刻Ｔ１−ΔＴから時刻Ｔ１までの間に、関節が正の方向に回転していた場合、制御部２０１は、回転方向を正の方向と特定してよい。また、別の例では、制御部２０１は、サブモーション情報４００で時刻Ｔ１の一つ前又は一つ後の時刻に登録されているエントリの姿勢との比較から、関節の回転方向を特定してもよい。
【００８４】
続く、Ｓ１４０４からＳ１４０８までの処理は、図８のＳ８０３からＳ８０７までの処理とそれぞれ対応していてよく、制御部２０１は、例えば、Ｓ１４０４及びＳ１４０８において、Ｓ８０３及びＳ８０７の処理と同様の処理を実行してよい。
【００８５】
Ｓ１４０９において制御部２０１は、時刻Ｔ２の各関節の駆動方向を特定し、特定した関節ごとの駆動方向をキャッシュする。例えば、制御部２０１は、時刻Ｔ２からΔＴ秒前又は後の姿勢を取得し、その姿勢と時刻Ｔ２での姿勢との比較から、時刻Ｔ２における関節の駆動方向を特定してよい。
【００８６】
また、続く、Ｓ１４１０及びＳ１４１１の処理は、図８のＳ８０８からＳ８０９までの処理とそれぞれ対応していてよく、制御部２０１は、例えば、Ｓ１４１０及びＳ１４１１において、Ｓ８０８からＳ８０９の処理と同様の処理を実行してよい。
【００８７】
Ｓ１４１２において制御部２０１は、連結ペアを特定し、本動作フローは終了する。例えば、制御部２０１は、Ｓ１４０８で積算角度差が閾値以下の時刻Ｔ１と時刻Ｔ２のペアのうちで、関節の駆動方向が同じであるペアがあれば、関節の駆動方向が同じであるペアの中から予備動作の期間が最も短くなるペアを選択してよい。また、Ｓ１４０８で積算角度差が閾値以下の時刻Ｔ１と時刻Ｔ２のペアのうちで、関節の回転方向が同じであるペアが無ければ、回転方向が異なるペアの中から、予備動作の期間が最も短くなるペアを選択してよい。
【００８８】
以上で述べた様に、第２の実施形態によれば、関節角の駆動方向が同じ姿勢の中から連結ペアを選択するため、自然なつながりでサブモーションが接続されたモーションを生成することができる。
【００８９】
（第３の実施形態）
続いて、第３の実施形態を説明する。第３の実施形態では、関節の駆動速度が近しい姿勢を連結ペアとして特定する例を述べる。例えば、制御部２０１は、速度に関する所定条件を満たす速度差の範囲に収まる駆動速度で関節が駆動している姿勢のペアを連結ペアとして特定してよい。
【００９０】
図１５は、関節の駆動速度の比較を例示する図である。例えば、制御部２０１は、予備動作の連続する姿勢間で、各関節の関節角の変化量（例えば、駆動速度）を求め、その変化量の大きさを合算する。例えば、図１５において、サブモーションＡの時刻：１．８秒〜２．０秒では、左腕関節が正（＋）の方向に３５度動いており、足元関節は０度で変化なしである。そのため、制御部２０１は、３５度と、０度を積算して、積算駆動速度：３５度を求める。この様に、制御部２０１は、所定の時間当たりの各関節ごとの駆動角度を駆動速度として用い、その大きさを積算することで積算駆動速度を求めてよい。例えば、サブモーションＡの時刻：２．０秒〜２．２秒では、左関節が正（＋）の方向に４０度動いており、足元関節は０度で変化なしである。そのため、制御部２０１は、４０度と、０度を積算して、積算駆動速度：４０度を求める。同様に、サブモーションＡの時刻：２．２秒〜２．４秒では、積算駆動速度：２５度となる。
【００９１】
また、サブモーションＢの時刻Ｔ２＝０．０秒〜０．２秒では、左腕関節が不（−）の方向（例えば、反時計回り）に２５度で、足元間接が正（＋）の方向（例えば、時計回り）に１０度駆動されているため、積算駆動速度は３５度となる。同様に、０．２秒〜０．４秒では、左腕関節が不（−）の方向（例えば、反時計回り）に３０度で、足元間接が正（＋）の方向（例えば、時計回り）に１０度駆動されているため、積算駆動速度は３５度となる。０．４秒〜０．６秒では、左腕関節が不（−）の方向（例えば、反時計回り）に２７度で、足元間接が正（＋）の駆動方向（例えば、時計回り）に０度で駆動されているため、積算駆動速度は２７度となる。０．６秒〜０．８秒では、左腕関節が不（−）の方向（例えば、反時計回り）に２５度で、足元間接が正（＋）の駆動方向（例えば、時計回り）に０度で駆動されているため、積算駆動速度は２５度となる。
【００９２】
そして、制御部２０１は、例えば、姿勢が所定の閾値以下で類似する姿勢のペアを特定した後で、特定した姿勢のペアのうちで、速度が近しいペアを連結ペアとして特定してよい。例えば、姿勢が所定の閾値以下で類似する姿勢のペアとして、サブモーションＡの終了予備動作の２．２秒又は２．４秒の姿勢と、サブモーションＢの開始予備動作の０．２秒の姿勢とが姿勢ペアとして特定されたとする。この場合、制御部２０１は、サブモーションＢの開始予備動作の０．２秒の直後の積算駆動速度：３５度と近しい値を、直前の積算駆動速度として有するＴ１＝２．２秒を連結ペアとして特定してよい。
【００９３】
以上で述べた様に、近しい速度で動作している位置の姿勢を連結ペアとして接続することで、サブモーションを速度変化が小さくなるように滑らかに繋ぐことができる。速度に関する所定条件は、例えば、上述のように、積算駆動速度が所定の閾値以内の速度であることであってよい。
【００９４】
図１６は、第３の実施形態に係る連結ペアの特定処理の動作フローを例示する図である。制御部２０１は、例えば、連結ペアの特定処理の実行指示が入力されると、図１６の動作フローを開始してよい。
【００９５】
Ｓ１６０１及びＳ１６０２は、図８のＳ８０１及びＳ８０２の処理とそれぞれ対応していてよく、制御部２０１は、例えば、Ｓ１６０１及びＳ１６０２において、Ｓ８０１及びＳ８０２の処理と同様の処理を実行してよい。
【００９６】
Ｓ１６０３において制御部２０１は、時刻Ｔ１の各関節の駆動速度を表す値を特定し、特定した駆動速度を表す値を時刻Ｔ１と対応づけてキャッシュする。例えば、制御部２０１は、時刻：Ｔ１からΔＴ秒前の姿勢を取得し、その姿勢と時刻Ｔ１での姿勢との比較から、関節の駆動速度を取得してよい。なお、ΔＴは、例えば、０．２秒など所定の時間であってよい。例えば、時刻Ｔ１−ΔＴから時刻Ｔ１までの間に、関節が正の方向に３０度で回転していた場合、制御部２０１は、駆動速度を正の方向に３０度と特定してよい。また、別の例では、制御部２０１は、サブモーション情報４００で時刻Ｔ１の一つ前の時刻に登録されているエントリの姿勢との比較から、関節の駆動速度を特定してもよい。なお、ロボット６００が、複数の関節を備える場合には、図１５を参照して上述した積算駆動速度を、駆動速度を表す値として用いてよい。
【００９７】
続く、Ｓ１６０４からＳ１６０８までの処理は、図８のＳ８０３からＳ８０７までの処理とそれぞれ対応していてよく、制御部２０１は、例えば、Ｓ１６０４及びＳ１６０８において、Ｓ８０３及びＳ８０７の処理と同様の処理を実行してよい。
【００９８】
Ｓ１６０９において制御部２０１は、時刻Ｔ２の駆動速度を特定し、特定した駆動速度をキャッシュする。例えば、制御部２０１は、時刻Ｔ２からΔＴ秒後の姿勢を取得し、その姿勢と時刻Ｔ２での姿勢との比較から、時刻Ｔ２における関節の駆動速度を特定してよい。
【００９９】
また、続く、Ｓ１６１０及びＳ１６１１の処理は、図８のＳ８０８からＳ８０９までの処理とそれぞれ対応していてよく、制御部２０１は、例えば、Ｓ１６１０及びＳ１６１１において、Ｓ８０８からＳ８０９の処理と同様の処理を実行してよい。
【０１００】
Ｓ１６１２において制御部２０１は、連結ペアを特定し、本動作フローは終了する。例えば、制御部２０１は、Ｓ１６０８で積算角度差が閾値以下と判定された時刻Ｔ１と時刻Ｔ２のペアのうちで、積算駆動速度が最も近しい値を有するペアを連結ペアとして選択してよい。
【０１０１】
以上で述べた様に、第３の実施形態によれば、関節の駆動速度が同じ姿勢の中から連結ペアを選択するため、速度変化が少なく自然な繋がりでサブモーションが接続されたモーションを生成することができる。
【０１０２】
なお、別な実施形態では、積算駆動速度の代わりに、制御部２０１は、最も大きく変化する関節を特定し、その関節の駆動速度が最も近しい姿勢を連結ペアとして用いてよい。
【０１０３】
また、別の実施形態では、制御部２０１は、所定の条件を満たす類似度を有する姿勢ペアのうちから、第２の実施形態で述べた駆動方向と第３の実施形態で述べた駆動速度との双方の判定を組み合わせて、連結ペア特定してもよい。
【０１０４】
以上において、実施形態を例示したが、実施形態はこれに限定されるものではない。例えば、上述の動作フローは例示であり、実施形態はこれに限定されるものではない。可能な場合には、動作フローは、処理の順番を変更して実行されてもよく、別に更なる処理を含んでもよく、又は、一部の処理が省略されてもよい。例えば、図１１のＳ１１０１〜Ｓ１１０２の処理と、Ｓ１１０３〜Ｓ１１０４の処理は順序を入れ替えて実行してもよい。また、例えば、上述の図１４及び図１６の処理の後に、制御部２０１は、図９の処理を実行してもよい。
【０１０５】
また、上述の実施形態では、２つのサブモーションの連結を例に説明を行ったが、実施形態はこれに限定されるものではない。例えば、３つ以上のサブモーションを連結してモーションを生成する場合にも、各連結部位において、上述の実施形態により連結ペアの特定と、補完モーションの生成を実行することで、自然なモーションを生成することができる。
【０１０６】
また、例えば、サブモーションの末端まで本動作として規定されることがある。図１７は、サブモーションの末端が本動作である場合を例示する図である。図１７（ａ）では、例えば、動作種別情報５００において、サブモーションＡの終了端は、本動作として規定されている。この場合に、例えば、制御部２０１は、サブモーションＡの終了端の姿勢を予備動作と見做し、終了端の姿勢と、サブモーションＢの開始予備動作の期間中の姿勢との間で類似姿勢を探索して連結ペアを特定してよい。
【０１０７】
図１７お（ｂ）では、例えば、動作種別情報５００において、サブモーションＢの開始端は、本動作として規定されている。この場合に、例えば、制御部２０１は、サブモーションＢの開始端の姿勢を予備動作と見做し、開始端の姿勢と、サブモーションＡの終了予備動作の期間中の姿勢との間で類似姿勢を探索して連結ペアを特定してよい。
【０１０８】
また、上記において本動作として、例えば、ユーザとのコミュニケーションで意味をもつジェスチャーの動作部分を例示している。しかしながら、例えば、手を繰り返し振る動作などの場合、手を振る回数が５回から４回に減ったとしてもユーザに与える印象に大きな差がでないことがある。そのため、本動作で、こうした繰り返し動作が規定される場合には、例えば、動作種別情報５００において実際には本動作の一部の動作を、予備動作として登録してもよい。それにより、実質上の本動作の期間での連結が可能になり、予備動作の期間をより短くすることが可能である。
【０１０９】
また、上述の実施形態において、例えば、サブモーションの開始位置と終了位置に同じホームポジションの姿勢を用いることで、連結ペアの候補が見つからない場合を抑制することができる。
【０１１０】
上述の実施形態において、例えば、図８のＳ８０７、図１４のＳ１４０８、及び図１６のＳ１６０８において制御部２０１は、特定部２１１として動作する。また、例えば、図９のＳ９０３において制御部２０１は、生成部２１２として動作する。
【０１１１】
図１８は、実施形態に係る情報処理装置２００を実現するためのコンピュータ１８００のハードウェア構成を例示する図である。図１８の情報処理装置２００を実現するためのハードウェア構成は、例えば、プロセッサ１８０１、メモリ１８０２、記憶装置１８０３、読取装置１８０４、通信インタフェース１８０６、及び入出力インタフェース１８０７を備える。なお、プロセッサ１８０１、メモリ１８０２、記憶装置１８０３、読取装置１８０４、通信インタフェース１８０６、入出力インタフェース１８０７は、例えば、バス１８０８を介して互いに接続されている。
【０１１２】
プロセッサ１８０１は、例えば、シングルプロセッサであっても、マルチプロセッサやマルチコアであってもよい。プロセッサ１８０１は、メモリ１８０２を利用して例えば上述の動作フローの手順を記述したプログラムを実行することにより、上述した各部の一部または全部の機能を提供する。例えば、情報処理装置２００のプロセッサ１８０１は、メモリ１８０２にプログラムを読み出して実行することで、特定部２１１、及び生成部２１２として動作する。
【０１１３】
メモリ１８０２は、例えば半導体メモリであり、ＲＡＭ領域及びＲＯＭ領域を含んでいてよい。記憶装置１８０３は、例えばハードディスク、フラッシュメモリ等の半導体メモリ、又は外部記憶装置である。なお、ＲＡＭは、Random Access Memoryの略称である。また、ＲＯＭは、Read Only Memoryの略称である。
【０１１４】
読取装置１８０４は、プロセッサ１８０１の指示に従って着脱可能記憶媒体１８０５にアクセスする。着脱可能記憶媒体１８０５は、例えば、半導体デバイス（ＵＳＢメモリ等）、磁気的作用により情報が入出力される媒体（磁気ディスク等）、光学的作用により情報が入出力される媒体（ＣＤ−ＲＯＭ、ＤＶＤ等）などにより実現される。なお、ＵＳＢは、Universal Serial Busの略称である。ＣＤは、Compact Discの略称である。ＤＶＤは、Digital Versatile Diskの略称である。上述の記憶部２０２は、例えば、メモリ１８０２、記憶装置１８０３、及び読取装置１８０４を含んでよい。情報処理装置２００の記憶装置１８０３には、例えば、サブモーション情報４００及び動作種別情報５００が格納されている。
【０１１５】
通信インタフェース１８０６は、プロセッサ１８０１の指示に従ってネットワークを介してデータを送受信する。入出力インタフェース１８０７は、例えば、入力装置及び出力装置との間のインタフェースであってよい。入力装置は、例えばユーザからの指示を受け付けるキーボードやマウスなどのデバイスである。出力装置は、例えばディスプレーなどの表示装置、及びスピーカなどの音声装置である。
【０１１６】
実施形態に係る各プログラムは、例えば、下記の形態で情報処理装置２００に提供される。
（１）記憶装置１８０３に予めインストールされている。
（２）着脱可能記憶媒体１８０５により提供される。
（３）プログラムサーバなどのサーバから提供される。 
【０１１７】
なお、図１８を参照して述べた情報処理装置２００を実現するためのコンピュータ１８００のハードウェア構成は、例示であり、実施形態はこれに限定されるものではない。例えば、上述の機能部の一部または全部の機能がＦＰＧＡ及びＳｏＣなどによるハードウェアとして実装されてもよい。なお、ＦＰＧＡは、Field Programmable Gate Arrayの略称である。ＳｏＣは、System-on-a-chipの略称である。
【０１１８】
以上において、いくつかの実施形態が説明される。しかしながら、実施形態は上記の実施形態に限定されるものではなく、上述の実施形態の各種変形形態及び代替形態を包含するものとして理解されるべきである。例えば、各種実施形態は、その趣旨及び範囲を逸脱しない範囲で構成要素を変形して具体化できることが理解されよう。また、前述した実施形態に開示されている複数の構成要素を適宜組み合わせることにより、種々の実施形態が実施され得ることが理解されよう。更には、実施形態に示される全構成要素からいくつかの構成要素を削除して又は置換して、或いは実施形態に示される構成要素にいくつかの構成要素を追加して種々の実施形態が実施され得ることが当業者には理解されよう。
【０１１９】
以上の実施形態に関し、更に以下の付記を開示する。
（付記１）
コンピュータにより実行されるモーション生成方法であって、前記コンピュータが、
ロボットの動作を規定する複数のサブモーションのうちの第１のサブモーションの後に第２のサブモーションを連結してモーションを生成する場合に、前記第１のサブモーションの終了側の予備動作に含まれる１以上の第１の姿勢と、前記第２のサブモーションの開始側の予備動作に含まれる１以上の第２の姿勢とのうちから所定の条件を満たす類似度で類似している第１の姿勢と第２の姿勢とのペアを特定し、
前記ペアの位置で、補完モーションにより前記第１のサブモーションと前記第２のサブモーションとを連結して前記モーションを生成する、
ことを含む、モーション生成方法。
（付記２）
前記所定の条件は、前記ペアとなった第１の姿勢と第２の姿勢との間で前記ロボットが備える関節の関節角の角度差が、角度に関する所定条件を満たす角度差の範囲に収まることである、付記１に記載のモーション生成方法。
（付記３）
前記所定の条件を満たす類似度で類似する第１の姿勢と第２の姿勢との複数のペアが特定された場合、前記モーションを生成する処理は、前記複数のペアのうちで、前記ペアとなった第１の姿勢と第２の姿勢が最も類似しているペアの位置で、前記補完モーションにより前記第１のサブモーションと前記第２のサブモーションとを連結する、付記１又は２に記載のモーション生成方法。
（付記４）
前記所定の条件を満たす類似度で類似する第１の姿勢と第２の姿勢との複数のペアが特定された場合、前記モーションを生成する処理は、前記第１のサブモーションの終了側の予備動作と、前記第２のサブモーションの開始側の予備動作とを合わせた予備動作の長さが最も短くなるペアの位置で、前記補完モーションにより前記第１のサブモーションと前記第２のサブモーションとを連結する、付記１又は２に記載のモーション生成方法。
（付記５）
前記所定の条件は、更に、前記ロボットが備える関節の駆動方向が同じであることを含む、付記１から４のいずれかに記載のモーション生成方法。
（付記６）
前記所定の条件は、更に、前記ロボットが備える関節の駆動速度が、速度に関する所定条件を満たす速度差の範囲に収まることを含む、付記１から４のいずれかに記載のモーション生成方法。
（付記７）
前記第１のサブモーションの前記終了側の予備動作の期間を、前記ロボットが備える関節の駆動方向が最後に変わる時点、又は前記ロボットが備える関節の駆動が最後に止まる時点に基づいて特定する、ことを更に含む、付記１から６のいずれかに記載のモーション生成方法。
（付記８）
前記第２のサブモーションの前記開始側の予備動作の期間を、前記ロボットが備える関節の駆動方向が最初に変わる時点、又は前記ロボットが備える関節の駆動が最初に止まる時点に基づいて特定する、ことを更に含む、付記１から７のいずれかに記載のモーション生成方法。
（付記９）
前記第２のサブモーションの前記開始側の予備動作の期間を、前記第２のサブモーションの開始端から後側に向かって前記ロボットが備える関節の駆動速度の変化量が所定の条件を満たす変化量を超えて変化した時点に基づいて特定する、ことを更に含む、付記１から６のいずれかに記載のモーション生成方法。
（付記１０）
前記第１のサブモーションの前記終了側の予備動作の期間を、前記第１のサブモーションの終了端から前側に向かって前記ロボットが備える関節の駆動速度の変化量が所定の条件を満たす変化量を超えて変化した時点に基づいて特定する、ことを更に含む、付記１から６及び付記９のいずれかに記載のモーション生成方法。
（付記１１）
記憶部に記憶されている前記複数のサブモーションのそれぞれの開始側の予備動作及び終了側の予備動作の期間を示す情報に基づいて、前記第１のサブモーションの終了側の予備動作及び前記第２のサブモーションの開始側の予備動作の期間を特定する、ことを更に含む、付記１から付記１０のいずれかに記載のモーション生成方法。
（付記１２）
前記補完モーションは、前記ペアの第１の姿勢と、前記ペアの第２の姿勢とを繋ぐ動作を線形に補完したモーションである、付記１から付記１１のいずれかに記載のモーション生成方法。
（付記１３）
ロボットの動作を規定する複数のサブモーションのうちの第１のサブモーションの後に第２のサブモーションを連結してモーションを生成する場合に、前記第１のサブモーションの終了側の予備動作に含まれる１以上の第１の姿勢と、前記第２のサブモーションの開始側の予備動作に含まれる１以上の第２の姿勢とのうちから所定の条件を満たす類似度で類似している第１の姿勢と第２の姿勢とのペアを特定し、
前記ペアの位置で、補完モーションにより前記第１のサブモーションと前記第２のサブモーションとを連結して前記モーションを生成する、
処理を情報処理装置に実行させるモーション生成プログラム。
（付記１４）
ロボットの動作を規定する複数のサブモーションのうちの第１のサブモーションの後に第２のサブモーションを連結してモーションを生成する場合に、前記第１のサブモーションの終了側の予備動作に含まれる１以上の第１の姿勢と、前記第２のサブモーションの開始側の予備動作に含まれる１以上の第２の姿勢とのうちから所定の条件を満たす類似度で類似している第１の姿勢と第２の姿勢とのペアを特定する特定部と、
前記ペアの位置で、補完モーションにより前記第１のサブモーションと前記第２のサブモーションとを連結して前記モーションを生成する生成部と、
を含む、情報処理装置。
【符号の説明】
【０１２０】
２００    情報処理装置
２０１    制御部
２０２    記憶部
２１１    特定部
２１２    生成部
６００    ロボット
１８００  コンピュータ
１８０１  プロセッサ
１８０２  メモリ
１８０３  記憶装置
１８０４  読取装置
１８０５  着脱可能記憶媒体
１８０６  通信インタフェース
１８０７  入出力インタフェース
１８０８  バス
【図１】
2020040172.tif 000003
【図２】
2020040172.tif 000004
【図３】
2020040172.tif 000005
【図４】
2020040172.tif 000006
【図５】
2020040172.tif 000007
【図６】
2020040172.tif 000008
【図７】
2020040172.tif 000009
【図８】
2020040172.tif 000010
【図９】
2020040172.tif 000011
【図１０】
2020040172.tif 000012
【図１１】
2020040172.tif 000013
【図１２】
2020040172.tif 000014
【図１３】
2020040172.tif 000015
【図１４】
2020040172.tif 000016
【図１５】
2020040172.tif 000017
【図１６】
2020040172.tif 000018
【図１７】
2020040172.tif 000019
【図１８】
2020040172.tif 000020