(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-01-25
(45)【発行日】2023-02-02
(54)【発明の名称】モーション生成方法、モーション生成プログラム、及び情報処理装置
(51)【国際特許分類】
B25J 13/00 20060101AFI20230126BHJP
【FI】
B25J13/00 Z
(21)【出願番号】P 2018169682
(22)【出願日】2018-09-11
【審査請求日】2021-06-10
(73)【特許権者】
【識別番号】000005223
【氏名又は名称】富士通株式会社
(74)【代理人】
【識別番号】100121083
【氏名又は名称】青木 宏義
(74)【代理人】
【識別番号】100138391
【氏名又は名称】天田 昌行
(74)【代理人】
【識別番号】100074099
【氏名又は名称】大菅 義之
(74)【代理人】
【識別番号】100133570
【氏名又は名称】▲徳▼永 民雄
(72)【発明者】
【氏名】木下 薫
(72)【発明者】
【氏名】清水 雅芳
(72)【発明者】
【氏名】神田 真司
(72)【発明者】
【氏名】井出 勝
(72)【発明者】
【氏名】江藤 祐
【審査官】稲垣 浩司
(56)【参考文献】
【文献】特開2013-97339(JP,A)
【文献】特開2011-175598(JP,A)
(58)【調査した分野】(Int.Cl.,DB名)
B25J 1/00 - 21/02
(57)【特許請求の範囲】
【請求項1】
コンピュータにより実行されるモーション生成方法であって、前記コンピュータが、
ロボットの動作を規定する複数のサブモーションのうちの第1のサブモーションの後に第2のサブモーションを連結してモーションを生成する場合に、前記第1のサブモーションの終了側の予備動作に含まれる1以上の第1の姿勢と、前記第2のサブモーションの開始側の予備動作に含まれる1以上の第2の姿勢とのうちから所定の条件を満た
す第1の姿勢と第2の姿勢とのペアを特定し、
前記ペアの位置で、補完モーションにより前記第1のサブモーションと前記第2のサブモーションとを連結して前記モーションを生成する、
ことを含
み、
前記所定の条件は、前記ペアとなった第1の姿勢と第2の姿勢との間で前記ロボットが備える関節の関節角の角度差が、角度に関する所定条件を満たす角度差の範囲に収まることである、
モーション生成方法。
【請求項2】
前記ペアの特定によって複数のペアが特定された場合、前記モーションを生成する処理は、前記複数のペアのうちで、前記ペアとなった第1の姿勢と第2の姿勢
との間で前記ロボットが備える関節ごとの関節角の角度差を合計した積算角度差が最も小さくなるペアの位置で、前記補完モーションにより前記第1のサブモーションと前記第2のサブモーションとを連結する、請求項
1に記載のモーション生成方法。
【請求項3】
前記ペアの特定によって複数のペアが特定された場合、前記モーションを生成する処理は、前記第1のサブモーションの終了側の予備動作と、前記第2のサブモーションの開始側の予備動作とを合わせた予備動作の長さが最も短くなるペアの位置で、前記補完モーションにより前記第1のサブモーションと前記第2のサブモーションとを連結する、請求項
1に記載のモーション生成方法。
【請求項4】
前記所定の条件は、更に、前記ロボットが備える関節の駆動方向が同じであることを含む、請求項1から
3のいずれか1項に記載のモーション生成方法。
【請求項5】
前記所定の条件は、更に、前記ロボットが備える関節の駆動速度が、速度に関する所定条件を満たす速度差の範囲に収まることを含む、請求項1から
3のいずれか1項に記載のモーション生成方法。
【請求項6】
前記第2のサブモーションの前記開始側の予備動作の期間を、前記第2のサブモーションの開始端から後側に向かって前記ロボットが備える関節の駆動速度の変化量が所定の条件を満たす変化量を超えて変化した時点に基づいて特定する、ことを更に含む、請求項1から
5のいずれか1項に記載のモーション生成方法。
【請求項7】
前記第1のサブモーションの前記終了側の予備動作の期間を、前記第1のサブモーションの終了端から前側に向かって前記ロボットが備える関節の駆動速度の変化量が所定の条件を満たす変化量を超えて変化した時点に基づいて特定する、ことを更に含む、請求項1から
6のいずれか1項に記載のモーション生成方法。
【請求項8】
記憶部に記憶されている前記複数のサブモーションのそれぞれの開始側の予備動作及び終了側の予備動作の期間を示す情報に基づいて、前記第1のサブモーションの終了側の予備動作及び前記第2のサブモーションの開始側の予備動作の期間を特定する、ことを更に含む、請求項1から請求項
7のいずれか1項に記載のモーション生成方法。
【請求項9】
ロボットの動作を規定する複数のサブモーションのうちの第1のサブモーションの後に第2のサブモーションを連結してモーションを生成する場合に、前記第1のサブモーションの終了側の予備動作に含まれる1以上の第1の姿勢と、前記第2のサブモーションの開始側の予備動作に含まれる1以上の第2の姿勢とのうちから所定の条件を満た
す第1の姿勢と第2の姿勢とのペアを特定し、
前記ペアの位置で、補完モーションにより前記第1のサブモーションと前記第2のサブモーションとを連結して前記モーションを生成する、
処理を情報処理装置に実行させ
、
前記所定の条件は、前記ペアとなった第1の姿勢と第2の姿勢との間で前記ロボットが備える関節の関節角の角度差が、角度に関する所定条件を満たす角度差の範囲に収まることである、
モーション生成プログラム。
【請求項10】
ロボットの動作を規定する複数のサブモーションのうちの第1のサブモーションの後に第2のサブモーションを連結してモーションを生成する場合に、前記第1のサブモーションの終了側の予備動作に含まれる1以上の第1の姿勢と、前記第2のサブモーションの開始側の予備動作に含まれる1以上の第2の姿勢とのうちから所定の条件を満た
す第1の姿勢と第2の姿勢とのペアを特定する特定部と、
前記ペアの位置で、補完モーションにより前記第1のサブモーションと前記第2のサブモーションとを連結して前記モーションを生成する生成部と、
を含
み、
前記所定の条件は、前記ペアとなった第1の姿勢と第2の姿勢との間で前記ロボットが備える関節の関節角の角度差が、角度に関する所定条件を満たす角度差の範囲に収まることである、
情報処理装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、モーション生成方法、モーション生成プログラム、及び情報処理装置に関する。
【背景技術】
【0002】
作業などに用いるロボットの他に、コミュニケーションやエンターテインメントなどの用途で利用されるロボットが開発されている。例えば、こうしたロボットのモーション作成法として、一連の動作全てを作成する方法と、部分的なモーションのセットを作成しておいて、それを組み合わせてモーションを生成する方法とが知られている。
【先行技術文献】
【特許文献】
【0003】
【発明の概要】
【発明が解決しようとする課題】
【0004】
しかしながら、複数の部分的なモーションのセットから部分的なモーションを組み合わせてより長いモーションを生成する場合に、生成されたモーションが不自然な動きを示すことがある。
【0005】
1つの側面では、本発明は、複数の部分的なモーションを組み合わせてモーションを生成する際に、自然な動きで繋がるモーションを生成することを目的とする。
【課題を解決するための手段】
【0006】
本発明の一つの態様のコンピュータにより実行されるモーション生成方法は、コンピュータが、ロボットの動作を規定する複数のサブモーションのうちの第1のサブモーションの後に第2のサブモーションを連結してモーションを生成する場合に、第1のサブモーションの終了側の予備動作に含まれる1以上の第1の姿勢と、第2のサブモーションの開始側の予備動作に含まれる1以上の第2の姿勢とのうちから所定の条件を満たす第1の姿勢と第2の姿勢とのペアを特定し、ペアの位置で、補完モーションにより第1のサブモーションと第2のサブモーションとを連結してモーションを生成する、ことを含み、当該所定の条件は、ペアとなった第1の姿勢と第2の姿勢との間でロボットが備える関節の関節角の角度差が、角度に関する所定条件を満たす角度差の範囲に収まることである。
【発明の効果】
【0007】
自然な動きで複数のモーションが繋がるモーションを生成することができる。
【図面の簡単な説明】
【0008】
【
図1】例示的なモーション生成方法を示す図である。
【
図2】実施形態にかかる情報処理装置のブロック構成を例示する図である。
【
図3】実施形態に係るサブモーションの連結を説明する図である。
【
図4】実施形態に係るサブモーション情報を例示する図である。
【
図5】実施形態に係る動作種別情報を例示する図である。
【
図6】連結する2つのサブモーションで指定されるロボットの動作を例示する図である。
【
図7】サブモーションAの終了予備動作の姿勢と、サブモーションBの開始予備動作の姿勢との比較を示す図である。
【
図8】第1の実施形態に係る連結ペアの決定処理の動作フローを例示する図である。
【
図9】実施形態に係るモーション生成処理の動作フローを例示する図である。
【
図10】第1の実施形態の変形例に係る予備動作及び本動作の期間の特定処理を説明する図である。
【
図11】第1の実施形態の変形例の予備動作及び本動作の期間の特定処理の動作フローを例示する図である。
【
図12】第2の実施形態に係る駆動方向の比較を説明する図である。
【
図13】第2の実施形態に係る駆動方向の比較を説明する別の図である。
【
図14】第2の実施形態に係る連結ペアの特定処理の動作フローを例示する図である。
【
図15】第3の実施形態に係る関節の駆動速度の比較を説明する図である。
【
図16】第3の実施形態に係る連結ペアの特定処理の動作フローを例示する図である。
【
図17】サブモーションの末端が本動作である場合を例示する図である。
【
図18】実施形態に係る情報処理装置を実現するためのコンピュータのハードウェア構成を例示する図である。
【発明を実施するための形態】
【0009】
以下、図面を参照しながら、本発明のいくつかの実施形態について詳細に説明する。なお、複数の図面において対応する要素には同一の符号を付す。
【0010】
上述のように、ロボットのモーション作成には、部品となる複数のモーションを含むモーションのセットを作成しておいて、それに含まれるモーションを組み合わせて目的に合わせたロボットのモーションを作成する方法がある。部品となるモーションは、ロボットの形態にもよるが、例えば、人型のロボットであれば、手で右方向を指示する動作、お辞儀する動作、手を振る動作、首を振る動作などユーザとのコミュニケーションに利用可能なジェスチャーを含んでよい。
【0011】
そして、こうした動作を組み合わせることで、例えば、ユーザとのコミュニケーションをとるための様々なモーションを生成することができる。例えば、ユーザにお別れを述べる際には、お辞儀するジェスチャーに続けて、手を振るジェスチャーを組み合わせてお別れの際の挨拶を表現するモーションを生成することができる。なお、以下では、部品となるモーションを、サブモーションと呼ぶことがあり、一方、サブモーションを組み合わせて生成するモーションを、単にモーションと呼ぶことがある。
【0012】
図1は、サブモーションを用いた例示的なモーション生成方法を示す図である。
図1は、サブモーションA及びサブモーションBの2つのサブモーションを繋いでモーションを生成する場合を例示している。
【0013】
図1(a)は、サブモーションをそのまま繋いでモーションを生成する方法を例示している。例えば、ロボットのサブモーションの開始時と終了時に同じ姿勢(以下では、ホームポジションと呼ぶことがある)をとるように、各サブモーションを作成する。ホームポジションとしては、複数のサブモーションを連結する姿勢として適した姿勢が用いられてよい。例えば、ホームポジションは、バランスのよい重心の位置を有する姿勢であってよく、人型のロボットであれば、腕などを体の縦の軸に近い位置に仕舞った小さい姿勢など、気を付けに近い姿勢であってよい。このように開始時の姿勢と終了時の姿勢に同じホームポジションの姿勢を用いることで、サブモーションをそのまま繋いだ場合にも、同じ姿勢で繋ぐことができる。
【0014】
しかしながら、この場合、手を振るなどのジェスチャーを開始する位置までホームポジションから姿勢を変えたり、動作後にホームポジションまで姿勢を戻したりするために時間がかかることがある。その結果、サブモーションを組み合わせて生成されたモーションが間延びしていたり、テンポが悪かったりしてしまうことがある。また、サブモーションの繋がりの位置で毎回ホームポジションに戻すことで、ユーザに不自然さを感じさせたり、単調な動作と感じさせたりすることがある。
【0015】
また、サブモーションの開始時と終了時の姿勢としてホームポジションを用いず、任意の異なる姿勢を用いるようにすると、例えば、
図1(b)に示すように、各サブモーションの全体の動作時間は短くなる。しかしながら、サブモーションAの終了姿勢と、サブモーションBの開始姿勢とが異なるため、連結の際に間に補完モーションなどを挟み込んで繋ぐことになる。この場合、前のサブモーションの終了姿勢や、後ろのサブモーションの開始姿勢などによっては、補完モーションが長くなってしまったりすることがある。その結果、生成されたモーションが間延びしたり、或いは動作のテンポが悪くなってしまったりすることがある。そのため、より自然な動作でサブモーションを連結し、モーションを生成することのできる技術の提供が望まれている。なお、自然な動作とは、例えば、ユーザが見て、サブモーションの繋がりの位置が認識しにくく、不自然な動きと感じ難い動作であってよい。一例として、自然な動作とは、動きの急激な速度の変動や、急激な駆動方向の変動が抑えられているロボットの動作であってよい。或いは、自然なモーションとは、例えば、間延びした動作となっておらず、テンポがよく動作が滑らかに進行するモーションであってよい。以下、実施形態を説明する。
【0016】
図2は、実施形態にかかる情報処理装置200の機能ブロック構成を例示する図である。情報処理装置200は、例えば、制御部201及び記憶部202を含んでいる。制御部201は、例えば、特定部211、及び生成部212などとして動作してよい。情報処理装置200の記憶部202は、例えば、後述するサブモーション情報400、及び動作種別情報500などの情報を記憶している。これらの各部の詳細及び記憶部202に格納されている情報の詳細については後述する。
【0017】
図3は、実施形態に係るサブモーションの連結を説明する図である。
図3に示す様に、実施形態では、情報処理装置200の制御部201は、サブモーションを予備動作と、本動作とに分ける(
図3の(1))。本動作とは、例えば、そのサブモーションで表現したい動作であってよく、ユーザとのコミュニケーションで意味をもつジェスチャーを実行する動作部分を含んでよい。ジェスチャーは、例えば、人に何かを伝えるためにする身振り手振りなどであってよい。本動作は、例えば、手を振ったり、方向を指示したりなどの動作を含む。また、予備動作とは、例えば、本動作の開始位置の姿勢まで別な姿勢から姿勢を移動させたり、本動作の終了位置から安定した姿勢まで姿勢を移動させたりなど、本動作の実行のための予備的な動作であってよい。例えば、サブモーションが手を振る動作であれば、予備動作は、手を振り始める開始位置まで腕を移動させる動作であってよい。
【0018】
続いて、情報処理装置200の制御部201は、連結する前側のサブモーション(ここでは、サブモーションA)の動作終わりの予備動作と、連結する後側のサブモーション(ここでは、サブモーションB)の動作始めの予備動作との姿勢を比較する。そして、制御部201は、連結する前側のサブモーションの動作終わりの予備動作と、連結する後側のサブモーションの動作始めの予備動作との間で、類似した姿勢をとっているそれぞれのサブモーションの時刻を連結ペアとして特定する(
図3の(2))。なお、動作終わりの予備動作を、以下では、終了予備動作又は終了側の予備動作と呼ぶことがある。また、動作終わりの予備動作に含まれる1以上の姿勢を、1以上の第1の姿勢と呼ぶことがある。動作始めの予備動作を、以下では、開始予備動作又は開始側の予備動作と呼ぶことがある。動作始めの予備動作に含まれる1以上の姿勢を、1以上の第2の姿勢と呼ぶことがある。連結ペアの特定の更なる詳細については、後述する。
【0019】
次に、情報処理装置200の制御部201は、例えば、特定した連結ペアの位置で2つのサブモーションを補完モーションで連結して、モーションを生成する(
図3の(3))。この様に、類似した姿勢をとる連結ペアの位置でサブモーションを結びつけることで、サブモーションを自然な繋がりでスムーズに連結することができる。また、連結の際に、連結ペアの位置から外側にあるサブモーションの末端部分は破棄される。そのため、それぞれのサブモーションの予備動作が短くなり、サブモーションの連結の際の間延びを抑制でき、テンポよく繋ぐことができる。そのため、実施形態によれば、生成されたモーションで動作するロボットからユーザが受ける違和感を抑えることが可能である。
【0020】
図4は、実施形態に係るロボットのサブモーションを規定するサブモーション情報400を例示する図である。なお、
図4に示すサブモーション情報400の例は、テーブル形式でサブモーションAに対する時刻と関節角とが対応付けてられているが、実施形態はこれに限定されるものではない。例えば、これらの時刻と関節角とを対応付ける形式であれば、テキストデータなどその他の形式でサブモーション情報400に含まれる情報の対応付けが記述されてもよい。
【0021】
サブモーション情報400では、種別と、時刻と、姿勢の情報とが対応付けられている。種別は、サブモーションを識別する識別子である。時刻は、一例では、種別で識別されるサブモーションの実行の開始時点からの経過時刻であってよい。また、姿勢は、例えば、エントリの時刻におけるロボットの姿勢を表す情報であってよい。一例では、姿勢は、ロボットが備える各関節の角度であってよい。
図4の例に示すように、ロボットが備える足元関節、右腕関節、左腕関節など、ロボットの形状に応じた関節の関節角が登録されている。サブモーション情報400に示される各時刻における関節の角度に従って、ロボットの関節を動かすことで、ロボットを動作させることができる。
【0022】
図5は、実施形態に係る動作種別情報500を例示する図である。
図5に示す例では、動作種別情報500には、識別情報、種別、及び期間を対応づけたエントリが登録されている。識別情報は、エントリで予備動作や本動作の期間を規定するサブモーションを識別するための識別情報である。また、種別は、エントリが示す期間が、予備動作を示すのか、それとも本動作の示すのかを表す情報である。例えば、“R”は予備動作を示し、“O”は本動作を示してよい。期間は、例えば、エントリの種別で示す動作が実行される期間を示し、開始の時刻と終了の時刻を含む。例えば、情報処理装置200の制御部201は、動作種別情報500のエントリの識別情報を用いて、エントリと対応するサブモーション情報400を特定することができる。制御部201は、動作種別情報500のエントリの種別と期間の情報から、サブモーション情報400で規定されるロボットの動作のうち、予備動作の期間と、本動作の期間とを特定することができる。
【0023】
なお、
図5に示す動作種別情報500の例では、テーブル形式で情報が対応づけられているが、実施形態はこれに限定されるものではなく、これらの情報を対応付ける形式であれば、テキストデータなどその他の形式で記述されてもよい。
【0024】
続いて、連結する対象の2つのサブモーションからの連結ペアとなる時刻を特定する処理について説明する。
【0025】
(第1の実施形態)
第1の実施形態では、類似度の高い姿勢を特定し、連結ペアとする場合の例を説明する。
【0026】
図6は、連結する2つのサブモーションで指定されるロボット600の動作を例示する図である。
図6の上段には、サブモーションAのロボット600の動作が示されている。
図6の下段には、サブモーションBのロボット600の動作が示されている。以下では、サブモーションAの後に、サブモーションBを連結する場合を例に、姿勢の類似度に基づく連結ペアの特定について説明する。なお、制御部201は、サブモーションにおける開始予備動作、本動作、及び終了予備動作の期間を、サブモーション情報400及び動作種別情報500を参照することで特定することができる。
【0027】
サブモーションAでは開始予備動作で、ロボット600は左手を持ち上げる(
図6の(1))。続いて、本動作でロボット600は、左手を振る(
図6の(2))。その後、終了予備動作で、ロボット600は左手を下す(
図6の(3))。
【0028】
また、サブモーションBでは開始予備動作で、ロボット600は足元の関節を左に倒して身体を左に傾けながら左手を持ち上げる(
図6の(4))。続いて、本動作でロボット600は、手を小さく繰り返し動かして方向指示する(
図6の(5))。その後、終了予備動作で、ロボット600は身体の傾きを戻しながら左手を下す(
図6の(6))。
【0029】
そして、実施形態では制御部201は、連結する2つのサブモーションの前側のサブモーションの終了予備動作と、後側のサブモーションの開始予備動作との間で、類似姿勢を探索する。第1の実施形態では、制御部201は、前側のサブモーションの終了予備動作の姿勢と、後側のサブモーションの開始時のサブモーションの姿勢とを比較し、各関節の角度の差が小さい姿勢を類似姿勢と判定する。一例では、制御部201は、例えば、前側のサブモーションの終了予備動作の姿勢と、後側のサブモーションの開始時のサブモーションの姿勢とを比較し、関節の角度差が、角度に関する所定条件を満たす角度差の範囲に収まる姿勢を類似姿勢と判定してよい。
【0030】
例えば、制御部201は、サブモーションAの終了予備動作に含まれる各姿勢の各関節の角度と、サブモーションBの開始予備動作の各姿勢の各関節の角度とを、姿勢ごとに比較する。一例では、制御部201は、サブモーションAの終了予備動作の姿勢と、サブモーションBの開始予備動作の姿勢との間で各関節ごとに関節角の差をとり、得られた各関節の角度差を合計した積算角度差が最も小さくなるペアを最も近い姿勢のペアとしてもよい。なお、制御部201は、サブモーションの予備動作に含まれる各姿勢を、そのサブモーションのサブモーション情報400と動作種別情報500を参照して取得してよい。
【0031】
図7は、サブモーションAの終了予備動作の4つの姿勢(時刻Tが、1.8秒、2.0秒、2.2秒、2.4秒)と、サブモーションBの開始予備動作の時刻T:0.2秒における姿勢を比較している。例えば、サブモーションAの終了予備動作の時刻T:1.8秒の姿勢と、サブモーションBの開始予備動作の時刻T=0.2秒の姿勢とで各関節毎に角度差を求めると、結果は、右腕関節角差が0度、左腕関節角差が70度、足元関節角差が3度である。角度差を合計した積算角度差は73度である。なお、
図7の例では、右腕関節は動かしていないため、表記を省略している。同様にサブモーションAの終了予備動作の時刻Tが、2.0秒、2.2秒、及び2.4秒のそれぞれの姿勢と、サブモーションBの開始予備動作の時刻T:0.2秒を比較することで、積算角度差により姿勢の類似度を評価することができる。例えば、
図7では、制御部201は、サブモーションAの終了予備動作の時刻T:2.2秒と、サブモーションBの開始予備動作の時刻T:0.2秒の積算角度差が最も小さい3度で、姿勢が最も似ている姿勢ペアとして特定することができる。
【0032】
続いて、制御部201は、各姿勢のペアごとに求めた姿勢の類似度(例えば、積算角度差)が、所定の条件を満たす類似度で類似しているか否かを判定する。所定の条件は、例えば、姿勢のペアとしたサブモーションAの終了予備動作の姿勢とサブモーションBの開始予備動作の姿勢との間でロボットが備える関節の関節角の角度差が、角度に関する所定条件を満たす角度差の範囲に収まることであってよい。例えば、制御部201は、積算角度差が所定の閾値以下で似ているか否かを判定する。所定の閾値は、例えば、5度~30度などの範囲の角度であってよく、一例では15度であってよい。
図7の例では、制御部201は、15度以下の積算角度差を有する姿勢ペアとして、サブモーションA:2.2秒とサブモーションB:0.2秒の姿勢のペアと、サブモーションA:2.4秒とサブモーションB:0.2秒の姿勢のペアを特定する。
【0033】
続いて、制御部201は、所定の閾値以下の積算角度差で類似している姿勢のペアのうちから、連結したときに予備動作の期間が最も短くなるペアを、サブモーションの連結位置として用いる連結ペアとして特定する。例えば、
図7の例では、サブモーションA:2.2秒とサブモーションB:0.2秒の姿勢ペアの方が、サブモーションA:2.4秒とサブモーションB:0.2秒の姿勢ペアよりも、破棄される予備動作の期間が長く、予備動作の期間が短くなる。そのため、制御部201は、サブモーションA:2.2秒とサブモーションB:0.2秒の姿勢ペアを連結ペアとして特定してよい。なお、実際には、制御部201は、サブモーションBの時刻:0.4秒についても、サブモーションAの終了予備動作の各姿勢と積算角度差を求める。そして、制御部201は、所定の閾値を満たす積算角度差を有し、且つ、より予備動作の期間が短くなる姿勢ペアがあれば、その姿勢ペアの時刻を連結ペアとして決定してよい。
【0034】
別の実施形態では、制御部201は、予備動作の期間が最も短くなるペアの代わりに、姿勢が最も類似しているペアを連結ペアとして決定してもよい。
【0035】
以上で述べた様に、姿勢の類似度に基づいて特定された類似姿勢のペアの位置でサブモーションを連結するため、自然な動作でサブモーションを連結することができる。
【0036】
なお、例えば、サブモーションAの手を振る本動作や、サブモーションBの方向を指示する本動作中でサブモーションを連結してしまうと、それらの動作で表されるジェスチャーが伝わりにくくなる恐れがある。そのため、上記の実施形態に示す様に、予備動作期間を特定し、予備動作期間の中で連結位置を特定することは好ましい。
【0037】
図8は、第1の実施形態に係る連結ペアの特定処理の動作フローを例示する図である。
図8は、例えば、連結ペアの特定処理の実行指示が入力されると開始してよい。なお、以下では、連結する2つのサブモーションの前側をサブモーションAとし、後側をサブモーションBとする場合を例に説明を行う。
【0038】
ステップ801(以降、ステップを“S”と記載し、例えば、S801と表記する)において制御部201は、サブモーションAの終了時刻:T1LastをT1に設定する。
【0039】
S802において制御部201は、サブモーションAの時刻T1における各関節の関節角を、時刻T1と対応付けて記憶部202にキャッシュする。
【0040】
S803において制御部201は、T1を1つ前の姿勢の時刻に変更する。例えば、制御部201は、サブモーション情報400を参照し、現在の時刻T1の1つ前の姿勢が登録されている時刻に、T1を更新する。なお、別の実施形態では、制御部201は、例えば、現在の時刻T1から所定時間前の時刻にT1を更新してよい。
【0041】
S804において制御部201は、更新後の時刻T1が、サブモーションAの終了予備動作の範囲内か否かを判定する。例えば、制御部201は、動作種別情報500を参照して、サブモーションAの終了予備動作の時刻範囲を特定し、その時刻範囲内に時刻T1が収まっているか否かを判定してよい。時刻T1が終了予備動作の範囲内である場合(S804がYes)、フローはS802に戻り、更新したT1について処理を繰り返す。一方、時刻T1が終了予備動作の範囲内でない場合(S804がNo)、フローはS805に進む。
【0042】
S805において制御部201は、後側のサブモーションBの開始予備動作の開始時刻:0.0を時刻T2に設定する。
【0043】
S806において制御部201は、サブモーションBの時刻T2における各関節の関節角と、記憶部202にキャッシュしたサブモーションAの終了予備動作の期間における各時刻ごとに、各関節の関節角との間で、積算角度差を求める。
【0044】
S807において制御部201は、所定の条件を満たす類似度で類似している時刻T1と時刻T2の姿勢ペアを記憶部202に記録する。例えば、制御部201は、所定の閾値以下の積算角度差を有する時刻T1と時刻T2の姿勢ペアを記憶部202に記録してよい。
【0045】
S808において制御部201は、T2を1つ後の姿勢の時刻に更新する。例えば、制御部201は、サブモーションBのサブモーション情報400を参照し、現在の時刻T2の1つ後の姿勢が登録されている時刻に、T2を更新する。なお、別の実施形態では、制御部201は、例えば、現在の時刻T2から所定時間後の時刻にT2を更新してよい。
【0046】
S809において制御部201は、更新後の時刻T2が、サブモーションBの開始予備動作の範囲内か否かを判定する。例えば、制御部201は、動作種別情報500を参照して、サブモーションBの開始予備動作の時刻範囲を特定し、その時刻範囲内に時刻T2が収まっているか否かを判定してよい。時刻T2が開始予備動作の範囲内である場合(S809がYes)、フローはS806に戻り、更新したT2について処理を繰り返す。一方、時刻T2が開始予備動作の範囲内でない場合(S809がNo)、フローはS810に進む。
【0047】
S810において制御部201は、記憶部202に記憶された所定の条件を満たす類似度で類似していると判定されている時刻T1と時刻T2の姿勢ペアのうちから、予備動作の期間が最も短くなるペアを連結ペアとして特定し、本動作フローは終了する。例えば、制御部201は、サブモーションAの終了予備動作と、サブモーションBの開始予備動作との和が最も小さくなる時刻T1と時刻T2のペアを、連結ペアとして特定してよい。それにより、類似姿勢を繋いで滑らかな動作を実現しつつも、予備動作期間を短くし、テンポの良いモーションを生成することができる。なお、別の実施形態では、制御部201は、積算角度差が最小だった時刻T1と時刻T2のペアを、連結ペアとして特定してもよい。
【0048】
以上で述べた様に、
図8の動作フローによれば、2つのサブモーションを連結する際に繋ぐ位置として、類似した姿勢のペアを特定することができる。また、類似した姿勢のペアのうちから予備動作が短くなるペアを選択することで、サブモーションをテンポよく繋ぐことが可能になる。
【0049】
なお、例えば、サブモーションの開始時及び終了時に、複数のサブモーションで共通するホームポジションに戻るようにすることで、所定の条件を満たす類似度で類似していると判定される姿勢ペアを少なくとも1つは見つけられるようにすることが可能である。
【0050】
また、上述の実施形態では、2つの姿勢の類似度を、各関節の関節角の差分を積算した積算角度差を用いて評価する例を述べたが、実施形態はこれに限定されるものではない。別の実施形態では、制御部201は、比較する対象の2つの姿勢の間でロボットが備える関節の関節角の差分をとって得た角度差が、所定の条件を満たす角度差の範囲内に収まる場合に、姿勢が所定の条件を満たす類似度で類似していると判定してよい。例えば、制御部201は、各関節の関節角の差分を取り、差分の最も大きかった関節の角度差が、所定の閾値以下である場合に、姿勢が所定の条件を満たす類似度で類似していると判定してよい。
【0051】
図9は、実施形態に係るモーション生成処理の動作フローを例示する図である。例えば、制御部201は、モーション生成処理の実行指示が入力されると
図9の動作フローを開始してよい。
【0052】
S901において制御部201は、上述のS810で特定した連結ペアに基づいて、前側のサブモーションの時刻T1における姿勢と、後側のサブモーションの時刻T2における姿勢とを取得する。
【0053】
S902において制御部201は、前側のサブモーションの時刻T1における姿勢と、後側のサブモーションの時刻T2における姿勢とを繋ぐ補完モーションを生成する。例えば、制御部201は、双方の姿勢を繋ぐ動作を線形に補完するように補完モーションを生成してよい。なお、補完の際の関節を動かす速度は、所定の速度であってよい。例えば、所定の速度は、前側のサブモーションの本動作における関節の移動速度を代表する代表値であってよい。別の例では、所定の速度は、後側のサブモーションの本動作における関節の移動速度を代表する代表値であっても、又は、前側のサブモーションと後側のサブモーションの両方の本動作における関節の移動速度を代表する代表値であってもよい。なお、代表値は、例えば、本動作期間での関節の駆動速度を基に求めた、平均値、中央値、最頻値などの統計値であってよい。或いは、所定の速度は、連結するときにユーザに指定させてもよい。
【0054】
S903において制御部201は、前側のサブモーションの時刻T1の姿勢と、後側のサブモーションの時刻T2の姿勢とを補完モーションでつないでモーションを生成し、本動作フローは終了する。
【0055】
図9の動作フローにより、滑らかに動作するモーションを生成することが可能である。なお、別の実施形態では、
図9の動作フローはS810の処理に続けて実行されてもよい。
【0056】
(第1の実施形態の変形例)
続いて、第1の実施形態の変形例を説明する。上述の実施形態では、予備動作を動作種別情報500に予め規定しておく例を述べた。しかしながら、実施形態はこれに限定されるものではなく、制御部201が、サブモーション情報400に規定された動作から予備動作の領域を特定してもよい。
【0057】
例えば、制御部201は、最初に関節の駆動方向が変わる(または止まる)時点から所定の条件を満たす時刻を本動作の開始時刻とする(開始時ルール)。開始時ルールの所定の条件は、一例では、所定時間前(例えば、0.2秒など)であってよく、別の例では、サブモーション情報400に規定される1つ前の姿勢の時刻であってよい。
【0058】
また、制御部201は、例えば、最後に関節の駆動方向が変わる(または止まる)時点から所定の条件を満たす時刻を本動作の終了時刻とする(終了時ルール)。終了時ルールの所定の条件は、例えば、所定時間後(例えば、0.2秒など)であってよく、別の例では、サブモーション情報400に規定される1つ後の姿勢の時刻であってよい。
【0059】
図10は、第1の実施形態の変形例に係る予備動作及び本動作の期間の特定処理を説明する図である。まず、本動作の開始時刻の特定について説明する。制御部201は、例えば、サブモーション情報400に規定されている動きを参照し、ロボット600に備えられたいずれかの関節で最初に駆動方向が変わる時点を特定する。
図10の上段のサブモーションAでは、制御部201は、最初に左腕関節の駆動方向が変わる時点である時刻:1.0秒を特定する。そして、制御部201は、例えば、時刻:1.0秒から0.2秒前の0.8秒を本動作の開始時刻として特定する。また、制御部201は、本動作の開始時刻として特定された0.8秒の1つ前の姿勢の0.6秒から開始時刻:0.0秒までの期間を開始予備動作の期間として特定してよい。
【0060】
また、本動作の終了時刻を特定する場合、制御部201は、例えば、サブモーション情報400に規定されている動きを参照し、ロボット600に備えられたいずれかの関節で最後に駆動方向が変わる時点を特定する。
図10の上段のサブモーションAでは、制御部201は、時刻:1.4秒を最後に左腕関節の駆動方向が変わる時点として特定する。そして、制御部201は、時刻:1.4秒から0.2秒後の1.6秒を本動作の終了時刻として特定する。また、制御部201は、本動作の終了時刻として特定された1.6秒の1つ後の姿勢の1.8秒から終了時刻:2.4秒までの期間を終了予備動作の期間として特定してよい。
【0061】
同様に、
図10の下段のサブモーションBで、本動作の開始時刻を特定する場合、制御部201は、時刻:0.4秒を最初に足元関節が停止する時点として特定する。足元関節の角度は、0.4秒と次の0.6秒で同じであるため、制御部201は、足元関節の停止を検出することができる。そこで、制御部201は、時刻:0.4秒の0.2秒前の0.2秒を本動作の開始時刻として特定する。また、制御部201は、本動作の開始時刻として特定された0.2秒の1つ前の姿勢の0.0秒を開始予備動作の期間として特定してよい。
【0062】
また、本動作の終了時刻を特定する場合、制御部201は、時刻:2.4秒を最後に足元関節が停止する時点として特定する。足元関節の角度は、2.4秒と前の2.2秒で同じであるため、制御部201は、足元関節の停止を特定することができる。そこで、制御部201は、時刻:2.4秒から0.2秒後の2.6秒を本動作の終了時刻として特定する。また、制御部201は、本動作の終了時刻として特定された2.6秒の1つ後の姿勢の2.8秒を終了予備動作の期間として特定してよい。
【0063】
なお、
図10の下段のサブモーションBでは、例えば、最初に駆動方向が変わる時点として、0.6秒で左腕関節の駆動方向が変わっているが、それよりも前の0.4秒に足元関節が停止しているため、足元関節に基づいて本動作の開始時刻が特定されている。本動作の終了時刻についても同様に、例えば、最後に駆動方向が変わる時点として、2.2秒で左腕関節の駆動方向が変わっているが、それよりも後の2.4秒に足元関節が停止しているため、足元関節に基づいて本動作の終了時刻が特定されている。
【0064】
例えば、以上で述べた様に、動作種別情報500を用いなくても、サブモーション情報400の情報から予備動作を特定することが可能である。
【0065】
図11は、以上で述べた、第1の実施形態の変形例の予備動作及び本動作の期間の特定処理の動作フローを例示する図である。制御部201は、例えば、サブモーション情報400に対する予備動作期間の特定処理の実行指示を受信すると、
図11の動作フローを開始してよい。
【0066】
S1101において制御部201は、指定されたサブモーション情報400を参照し、最初にいずれかの関節の駆動方向が変わる(または止まる)時点を特定する。
【0067】
S1102において制御部201は、特定した時点に基づいて、本動作の開始時刻を特定する。例えば、制御部201は、特定した時点から所定の条件を満たす時刻を本動作の開始時刻として特定してよい。所定の条件を満たす時刻は、例えば、S1101で特定した時点の所定時間(例えば、0.2秒)前の時刻であってよい。或いは、所定の条件を満たす時刻は、例えば、サブモーション情報400に登録されている時系列の複数の姿勢のうち、S1101で特定した時点の1つ前の姿勢が登録されている時刻であってよい。
【0068】
S1103において制御部201は、指定されたサブモーション情報400を参照し、最後にいずれかの関節の駆動方向が変わる(または止まる)時点を特定する。
【0069】
S1104において制御部201は、特定した時点に基づいて、本動作の終了時刻を特定する。例えば、制御部201は、特定した時点から所定の条件を満たす時刻を本動作の終了時刻として特定してよい。所定の条件を満たす時刻は、例えば、S1103で特定した時点の所定時間(例えば、0.2秒)後の時刻であってよい。或いは、所定の条件を満たす時刻は、例えば、サブモーション情報400に登録されている時系列の複数の姿勢のうち、S1103で特定した時点の姿勢の1つ後の姿勢が登録されている時刻であってよい。
【0070】
S1105において制御部201は、本動作の期間に基づいて、開始予備動作及び終了予備動作を特定する。例えば、制御部201は、本動作の開始時刻よりも前を開始予備動作として特定し、及び本動作の終了時刻よりも後を終了予備動作として特定し、本動作フローは終了する。
【0071】
図11の動作フローによれば、動作種別情報500を用いなくても、サブモーション情報400の情報から本動作及び予備動作の期間を特定することができる。
【0072】
なお、サブモーション情報400からの予備動作期間の特定は、上記の例に限定されるものでは無く、その他の手法が用いられてもよい。例えば、別の実施形態では、制御部201は、ロボット600が所定の誤差範囲内で等速に動作している区間を予備動作として抽出してもよい。一例では、制御部201は、ロボット600が備える関節の駆動速度の変化量が、所定の条件を満たす変化量を超えて変化した時点に基づいて、予備動作の期間を特定する。
【0073】
例えば、制御部201は、上述のS1101において、サブモーションの開始時刻から後ろに向かって順に、隣接する姿勢との各関節の関節角の差を算出する。そして、制御部201は、得られた各関節の差を合算して積算角度差を求め、積算角度差が、一つ前の積算角度差に対して30%以上多く変動した場合に、その時刻をS1101で特定する時点として用いてよい。また、別の実施形態では更に、制御部201は、30%を超えて変動した時刻の後ろの積算角度差が、30%を超えて変動した時刻よりも前の積算角度差の平均値の10%以上多く変動しているか確認する。そして、制御部201は、10%以上多く変動している場合に、その時刻をS1101で特定する時点として用いてよい。
【0074】
同様に、例えば、制御部201は、上述のS1103において、サブモーションの終了時刻から前側に向かって順に、隣接する姿勢との各関節の角度差を算出する。そして、制御部201は、得られた各関節の差を合算して積算角度差を求め、積算角度差が、一つ後の積算角度差に対して30%以上多く変動した場合に、その時刻をS1103で特定した時点として用いてよい。また、別の実施形態では更に、制御部201は、30%を超えて変動した時刻の前側の積算角度差が、30%を超えて変動した時刻よりも後の積算角度差の平均値の10%を超えて多く変動しているか確認する。そして、制御部201は、30%を超えて変動した時刻の前側の積算角度差が、30%を超えて変動した時刻よりも後の積算角度差の平均値の10%を超えて多く変動している場合に、その時刻をS1103で特定する時点として用いてよい。なお、閾値として用いる積算角度差のパーセンテージは例示であり、例えば、5%から50%の範囲のパーセンテージなど、その他のパーセンテージが閾値として用いられてよい。
【0075】
更に別の実施形態では、制御部201は、例えば、サブモーションの開始から所定の時間の期間と、終了から前側に所定の時間の期間とを、予備動作の期間として特定してもよい。以上で述べたように、実施形態によれば様々な手法を用いて、サブモーション情報400から予備動作の期間を特定することができる。
【0076】
(第2の実施形態)
続いて、第2の実施形態を説明する。第1の実施形態では、連結ペアを姿勢の類似度(各関節の関節角の類似度)に基づいて特定する例を述べた。第2の実施形態では、更に、ロボットの動作の駆動方向に基づいて連結ペアを特定する例を述べる。
【0077】
図12及び
図13は、第2の実施形態に係る連結ペアの特定処理を説明する図である。
図12は、
図7で述べた姿勢の比較に、更に関節の回転方向を記載している。また、
図12の例では、サブモーションBの開始予備動作及び終了予備動作の期間が
図7で述べた例よりも長くなるように、動作種別情報500において予備動作期間が指定されている。
【0078】
サブモーションAの時刻:2.2秒と時刻:2.4秒の姿勢は、
図7で述べた様に、サブモーションBの時刻:0.2秒の姿勢と、積算角度差が所定の閾値以内で類似する姿勢をしている。しかしながら、
図12に示すように、サブモーションAの終了予備動作は、左腕を正の方向(例えば、時計回り)に回しており、一方、サブモーションBの時刻:0.2秒の姿勢は、左腕を
負の方向(例えば、反時計回り)に回転させている最中にある。そのため、サブモーションAの時刻:2.2秒と時刻:2.4秒の姿勢と、サブモーションBの時刻:0.2秒の姿勢とを連結ペアとして用いてサブモーションを連結すると、連結により回転方向を変えることになる。その結果、不自然なロボット600の動作となることがある。そのため、第2の実施形態では、姿勢が似ており、且つ、関節の駆動方向が同じである姿勢を連結ペアの姿勢として探索する。なお、各関節の駆動方向は、サブモーション情報400において駆動方向を特定する対象とする時刻の姿勢と、その時刻の前又は後の姿勢との間での関節角の変化量から特定することができる。
【0079】
図13では、サブモーションAの終了予備動作に含まれる4つの姿勢と、サブモーションBの開始予備動作の時刻0.8秒の姿勢とを比較している。
図13に示す様に、サブモーションBの開始予備動作の時刻0.8秒において左腕関節の回転方向は正の方向であり、サブモーションAの終了予備動作の左腕関節の回転方向と同じである。また、サブモーションBの開始予備動作の時刻0.8秒の姿勢の各関節の関節角を用いて求めた積算角度差は、サブモーションAの時刻:1.8秒と、時刻:2.0秒で所定の閾値(例えば、15度など)以下の角度になっている。この場合、例えば、左腕関節の回転方向が同じで、且つ、予備動作が短くなるように、制御部201は、サブモーションAの時刻:1.8秒と、サブモーションBの時刻:0.8秒とを連結ペアとして決定してよい。
【0080】
以上のように、ロボット600の駆動方向を合わせて予備動作を連結することで、動作が滑らかに繋がり、ユーザが自然な動作と感じるモーションを生成することができる。
【0081】
図14は、第2の実施形態に係る連結ペアの特定処理の動作フローを例示する図である。制御部201は、例えば、連結ペアの特定処理の実行指示が入力されると、
図14の動作フローを開始してよい。
【0082】
S1401及びS1402は、
図8のS801及びS802の処理とそれぞれ対応していてよく、制御部201は、例えば、S1401及びS1402において、S801及びS802の処理と同様の処理を実行してよい。
【0083】
S1403において制御部201は、時刻T1の各関節の駆動方向を特定し、特定した関節ごとの駆動方向を時刻T1と対応づけてキャッシュする。例えば、制御部201は、時刻:T1からΔT秒前又は後の姿勢を取得し、その姿勢と時刻T1での姿勢との比較から、関節の回転方向を取得してよい。なお、ΔTは、例えば、0.2秒など所定の時間であってよい。例えば、時刻T1-ΔTから時刻T1までの間に、関節が正の方向に回転していた場合、制御部201は、回転方向を正の方向と特定してよい。また、別の例では、制御部201は、サブモーション情報400で時刻T1の一つ前又は一つ後の時刻に登録されているエントリの姿勢との比較から、関節の回転方向を特定してもよい。
【0084】
続く、S1404からS1408までの処理は、
図8のS803からS807までの処理とそれぞれ対応していてよく、制御部201は、例えば、S1404及びS1408において、S803及びS807の処理と同様の処理を実行してよい。
【0085】
S1409において制御部201は、時刻T2の各関節の駆動方向を特定し、特定した関節ごとの駆動方向をキャッシュする。例えば、制御部201は、時刻T2からΔT秒前又は後の姿勢を取得し、その姿勢と時刻T2での姿勢との比較から、時刻T2における関節の駆動方向を特定してよい。
【0086】
また、続く、S1410及びS1411の処理は、
図8のS808からS809までの処理とそれぞれ対応していてよく、制御部201は、例えば、S1410及びS1411において、S808からS809の処理と同様の処理を実行してよい。
【0087】
S1412において制御部201は、連結ペアを特定し、本動作フローは終了する。例えば、制御部201は、S1408で積算角度差が閾値以下の時刻T1と時刻T2のペアのうちで、関節の駆動方向が同じであるペアがあれば、関節の駆動方向が同じであるペアの中から予備動作の期間が最も短くなるペアを選択してよい。また、S1408で積算角度差が閾値以下の時刻T1と時刻T2のペアのうちで、関節の回転方向が同じであるペアが無ければ、回転方向が異なるペアの中から、予備動作の期間が最も短くなるペアを選択してよい。
【0088】
以上で述べた様に、第2の実施形態によれば、関節角の駆動方向が同じ姿勢の中から連結ペアを選択するため、自然なつながりでサブモーションが接続されたモーションを生成することができる。
【0089】
(第3の実施形態)
続いて、第3の実施形態を説明する。第3の実施形態では、関節の駆動速度が近しい姿勢を連結ペアとして特定する例を述べる。例えば、制御部201は、速度に関する所定条件を満たす速度差の範囲に収まる駆動速度で関節が駆動している姿勢のペアを連結ペアとして特定してよい。
【0090】
図15は、関節の駆動速度の比較を例示する図である。例えば、制御部201は、予備動作の連続する姿勢間で、各関節の関節角の変化量(例えば、駆動速度)を求め、その変化量の大きさを合算する。例えば、
図15において、サブモーションAの時刻:1.8秒~2.0秒では、左腕関節が正(+)の方向に35度動いており、足元関節は0度で変化なしである。そのため、制御部201は、35度と、0度を積算して、積算駆動速度:35度を求める。この様に、制御部201は、所定の時間当たりの各関節ごとの駆動角度を駆動速度として用い、その大きさを積算することで積算駆動速度を求めてよい。例えば、サブモーションAの時刻:2.0秒~2.2秒では、左関節が正(+)の方向に40度動いており、足元関節は0度で変化なしである。そのため、制御部201は、40度と、0度を積算して、積算駆動速度:40度を求める。同様に、サブモーションAの時刻:2.2秒~2.4秒では、積算駆動速度:25度となる。
【0091】
また、サブモーションBの時刻T2=0.0秒~0.2秒では、左腕関節が負(-)の方向(例えば、反時計回り)に25度で、足元関節が正(+)の方向(例えば、時計回り)に10度駆動されているため、積算駆動速度は35度となる。同様に、0.2秒~0.4秒では、左腕関節が負(-)の方向(例えば、反時計回り)に30度で、足元関節が正(+)の方向(例えば、時計回り)に10度駆動されているため、積算駆動速度は35度となる。0.4秒~0.6秒では、左腕関節が負(-)の方向(例えば、反時計回り)に27度で、足元関節が正(+)の駆動方向(例えば、時計回り)に0度で駆動されているため、積算駆動速度は27度となる。0.6秒~0.8秒では、左腕関節が正(+)の方向(例えば、時計回り)に25度で、足元関節が正(+)の駆動方向(例えば、時計回り)に0度で駆動されているため、積算駆動速度は25度となる。
【0092】
そして、制御部201は、例えば、姿勢が所定の閾値以下で類似する姿勢のペアを特定した後で、特定した姿勢のペアのうちで、速度が近しいペアを連結ペアとして特定してよい。例えば、姿勢が所定の閾値以下で類似する姿勢のペアとして、サブモーションAの終了予備動作の2.2秒又は2.4秒の姿勢と、サブモーションBの開始予備動作の0.2秒の姿勢とが姿勢ペアとして特定されたとする。この場合、制御部201は、サブモーションBの開始予備動作の0.2秒の直後の積算駆動速度:35度と近しい値を、直前の積算駆動速度として有するT1=2.2秒を連結ペアとして特定してよい。
【0093】
以上で述べた様に、近しい速度で動作している位置の姿勢を連結ペアとして接続することで、サブモーションを速度変化が小さくなるように滑らかに繋ぐことができる。速度に関する所定条件は、例えば、上述のように、積算駆動速度が所定の閾値以内の速度であることであってよい。
【0094】
図16は、第3の実施形態に係る連結ペアの特定処理の動作フローを例示する図である。制御部201は、例えば、連結ペアの特定処理の実行指示が入力されると、
図16の動作フローを開始してよい。
【0095】
S1601及びS1602は、
図8のS801及びS802の処理とそれぞれ対応していてよく、制御部201は、例えば、S1601及びS1602において、S801及びS802の処理と同様の処理を実行してよい。
【0096】
S1603において制御部201は、時刻T1の各関節の駆動速度を表す値を特定し、特定した駆動速度を表す値を時刻T1と対応づけてキャッシュする。例えば、制御部201は、時刻:T1からΔT秒前の姿勢を取得し、その姿勢と時刻T1での姿勢との比較から、関節の駆動速度を取得してよい。なお、ΔTは、例えば、0.2秒など所定の時間であってよい。例えば、時刻T1-ΔTから時刻T1までの間に、関節が正の方向に30度で回転していた場合、制御部201は、駆動速度を正の方向に30度と特定してよい。また、別の例では、制御部201は、サブモーション情報400で時刻T1の一つ前の時刻に登録されているエントリの姿勢との比較から、関節の駆動速度を特定してもよい。なお、ロボット600が、複数の関節を備える場合には、
図15を参照して上述した積算駆動速度を、駆動速度を表す値として用いてよい。
【0097】
続く、S1604からS1608までの処理は、
図8のS803からS807までの処理とそれぞれ対応していてよく、制御部201は、例えば、S1604及びS1608において、S803及びS807の処理と同様の処理を実行してよい。
【0098】
S1609において制御部201は、時刻T2の駆動速度を特定し、特定した駆動速度をキャッシュする。例えば、制御部201は、時刻T2からΔT秒後の姿勢を取得し、その姿勢と時刻T2での姿勢との比較から、時刻T2における関節の駆動速度を特定してよい。
【0099】
また、続く、S1610及びS1611の処理は、
図8のS808からS809までの処理とそれぞれ対応していてよく、制御部201は、例えば、S1610及びS1611において、S808からS809の処理と同様の処理を実行してよい。
【0100】
S1612において制御部201は、連結ペアを特定し、本動作フローは終了する。例えば、制御部201は、S1608で積算角度差が閾値以下と判定された時刻T1と時刻T2のペアのうちで、積算駆動速度が最も近しい値を有するペアを連結ペアとして選択してよい。
【0101】
以上で述べた様に、第3の実施形態によれば、関節の駆動速度が同じ姿勢の中から連結ペアを選択するため、速度変化が少なく自然な繋がりでサブモーションが接続されたモーションを生成することができる。
【0102】
なお、別な実施形態では、積算駆動速度の代わりに、制御部201は、最も大きく変化する関節を特定し、その関節の駆動速度が最も近しい姿勢を連結ペアとして用いてよい。
【0103】
また、別の実施形態では、制御部201は、所定の条件を満たす類似度を有する姿勢ペアのうちから、第2の実施形態で述べた駆動方向と第3の実施形態で述べた駆動速度との双方の判定を組み合わせて、連結ペア特定してもよい。
【0104】
以上において、実施形態を例示したが、実施形態はこれに限定されるものではない。例えば、上述の動作フローは例示であり、実施形態はこれに限定されるものではない。可能な場合には、動作フローは、処理の順番を変更して実行されてもよく、別に更なる処理を含んでもよく、又は、一部の処理が省略されてもよい。例えば、
図11のS1101~S1102の処理と、S1103~S1104の処理は順序を入れ替えて実行してもよい。また、例えば、上述の
図14及び
図16の処理の後に、制御部201は、
図9の処理を実行してもよい。
【0105】
また、上述の実施形態では、2つのサブモーションの連結を例に説明を行ったが、実施形態はこれに限定されるものではない。例えば、3つ以上のサブモーションを連結してモーションを生成する場合にも、各連結部位において、上述の実施形態により連結ペアの特定と、補完モーションの生成を実行することで、自然なモーションを生成することができる。
【0106】
また、例えば、サブモーションの末端まで本動作として規定されることがある。
図17は、サブモーションの末端が本動作である場合を例示する図である。
図17(a)では、例えば、動作種別情報500において、サブモーションAの終了端は、本動作として規定されている。この場合に、例えば、制御部201は、サブモーションAの終了端の姿勢を予備動作と見做し、終了端の姿勢と、サブモーションBの開始予備動作の期間中の姿勢との間で類似姿勢を探索して連結ペアを特定してよい。
【0107】
図17(b)では、例えば、動作種別情報500において、サブモーションBの開始端は、本動作として規定されている。この場合に、例えば、制御部201は、サブモーションBの開始端の姿勢を予備動作と見做し、開始端の姿勢と、サブモーションAの終了予備動作の期間中の姿勢との間で類似姿勢を探索して連結ペアを特定してよい。
【0108】
また、上記において本動作として、例えば、ユーザとのコミュニケーションで意味をもつジェスチャーの動作部分を例示している。しかしながら、例えば、手を繰り返し振る動作などの場合、手を振る回数が5回から4回に減ったとしてもユーザに与える印象に大きな差がでないことがある。そのため、本動作で、こうした繰り返し動作が規定される場合には、例えば、動作種別情報500において実際には本動作の一部の動作を、予備動作として登録してもよい。それにより、実質上の本動作の期間での連結が可能になり、予備動作の期間をより短くすることが可能である。
【0109】
また、上述の実施形態において、例えば、サブモーションの開始位置と終了位置に同じホームポジションの姿勢を用いることで、連結ペアの候補が見つからない場合を抑制することができる。
【0110】
上述の実施形態において、例えば、
図8のS807、
図14のS1408、及び
図16のS1608において制御部201は、特定部211として動作する。また、例えば、
図9のS903において制御部201は、生成部212として動作する。
【0111】
図18は、実施形態に係る情報処理装置200を実現するためのコンピュータ1800のハードウェア構成を例示する図である。
図18の情報処理装置200を実現するためのハードウェア構成は、例えば、プロセッサ1801、メモリ1802、記憶装置1803、読取装置1804、通信インタフェース1806、及び入出力インタフェース1807を備える。なお、プロセッサ1801、メモリ1802、記憶装置1803、読取装置1804、通信インタフェース1806、入出力インタフェース1807は、例えば、バス1808を介して互いに接続されている。
【0112】
プロセッサ1801は、例えば、シングルプロセッサであっても、マルチプロセッサやマルチコアであってもよい。プロセッサ1801は、メモリ1802を利用して例えば上述の動作フローの手順を記述したプログラムを実行することにより、上述した各部の一部または全部の機能を提供する。例えば、情報処理装置200のプロセッサ1801は、メモリ1802にプログラムを読み出して実行することで、特定部211、及び生成部212として動作する。
【0113】
メモリ1802は、例えば半導体メモリであり、RAM領域及びROM領域を含んでいてよい。記憶装置1803は、例えばハードディスク、フラッシュメモリ等の半導体メモリ、又は外部記憶装置である。なお、RAMは、Random Access Memoryの略称である。また、ROMは、Read Only Memoryの略称である。
【0114】
読取装置1804は、プロセッサ1801の指示に従って着脱可能記憶媒体1805にアクセスする。着脱可能記憶媒体1805は、例えば、半導体デバイス(USBメモリ等)、磁気的作用により情報が入出力される媒体(磁気ディスク等)、光学的作用により情報が入出力される媒体(CD-ROM、DVD等)などにより実現される。なお、USBは、Universal Serial Busの略称である。CDは、Compact Discの略称である。DVDは、Digital Versatile Diskの略称である。上述の記憶部202は、例えば、メモリ1802、記憶装置1803、及び読取装置1804を含んでよい。情報処理装置200の記憶装置1803には、例えば、サブモーション情報400及び動作種別情報500が格納されている。
【0115】
通信インタフェース1806は、プロセッサ1801の指示に従ってネットワークを介してデータを送受信する。入出力インタフェース1807は、例えば、入力装置及び出力装置との間のインタフェースであってよい。入力装置は、例えばユーザからの指示を受け付けるキーボードやマウスなどのデバイスである。出力装置は、例えばディスプレーなどの表示装置、及びスピーカなどの音声装置である。
【0116】
実施形態に係る各プログラムは、例えば、下記の形態で情報処理装置200に提供される。
(1)記憶装置1803に予めインストールされている。
(2)着脱可能記憶媒体1805により提供される。
(3)プログラムサーバなどのサーバから提供される。
【0117】
なお、
図18を参照して述べた情報処理装置200を実現するためのコンピュータ1800のハードウェア構成は、例示であり、実施形態はこれに限定されるものではない。例えば、上述の機能部の一部または全部の機能がFPGA及びSoCなどによるハードウェアとして実装されてもよい。なお、FPGAは、Field Programmable Gate Arrayの略称である。SoCは、System-on-a-chipの略称である。
【0118】
以上において、いくつかの実施形態が説明される。しかしながら、実施形態は上記の実施形態に限定されるものではなく、上述の実施形態の各種変形形態及び代替形態を包含するものとして理解されるべきである。例えば、各種実施形態は、その趣旨及び範囲を逸脱しない範囲で構成要素を変形して具体化できることが理解されよう。また、前述した実施形態に開示されている複数の構成要素を適宜組み合わせることにより、種々の実施形態が実施され得ることが理解されよう。更には、実施形態に示される全構成要素からいくつかの構成要素を削除して又は置換して、或いは実施形態に示される構成要素にいくつかの構成要素を追加して種々の実施形態が実施され得ることが当業者には理解されよう。
【0119】
以上の実施形態に関し、更に以下の付記を開示する。
(付記1)
コンピュータにより実行されるモーション生成方法であって、前記コンピュータが、
ロボットの動作を規定する複数のサブモーションのうちの第1のサブモーションの後に第2のサブモーションを連結してモーションを生成する場合に、前記第1のサブモーションの終了側の予備動作に含まれる1以上の第1の姿勢と、前記第2のサブモーションの開始側の予備動作に含まれる1以上の第2の姿勢とのうちから所定の条件を満たす類似度で類似している第1の姿勢と第2の姿勢とのペアを特定し、
前記ペアの位置で、補完モーションにより前記第1のサブモーションと前記第2のサブモーションとを連結して前記モーションを生成する、
ことを含む、モーション生成方法。
(付記2)
前記所定の条件は、前記ペアとなった第1の姿勢と第2の姿勢との間で前記ロボットが備える関節の関節角の角度差が、角度に関する所定条件を満たす角度差の範囲に収まることである、付記1に記載のモーション生成方法。
(付記3)
前記所定の条件を満たす類似度で類似する第1の姿勢と第2の姿勢との複数のペアが特定された場合、前記モーションを生成する処理は、前記複数のペアのうちで、前記ペアとなった第1の姿勢と第2の姿勢が最も類似しているペアの位置で、前記補完モーションにより前記第1のサブモーションと前記第2のサブモーションとを連結する、付記1又は2に記載のモーション生成方法。
(付記4)
前記所定の条件を満たす類似度で類似する第1の姿勢と第2の姿勢との複数のペアが特定された場合、前記モーションを生成する処理は、前記第1のサブモーションの終了側の予備動作と、前記第2のサブモーションの開始側の予備動作とを合わせた予備動作の長さが最も短くなるペアの位置で、前記補完モーションにより前記第1のサブモーションと前記第2のサブモーションとを連結する、付記1又は2に記載のモーション生成方法。
(付記5)
前記所定の条件は、更に、前記ロボットが備える関節の駆動方向が同じであることを含む、付記1から4のいずれかに記載のモーション生成方法。
(付記6)
前記所定の条件は、更に、前記ロボットが備える関節の駆動速度が、速度に関する所定条件を満たす速度差の範囲に収まることを含む、付記1から4のいずれかに記載のモーション生成方法。
(付記7)
前記第1のサブモーションの前記終了側の予備動作の期間を、前記ロボットが備える関節の駆動方向が最後に変わる時点、又は前記ロボットが備える関節の駆動が最後に止まる時点に基づいて特定する、ことを更に含む、付記1から6のいずれかに記載のモーション生成方法。
(付記8)
前記第2のサブモーションの前記開始側の予備動作の期間を、前記ロボットが備える関節の駆動方向が最初に変わる時点、又は前記ロボットが備える関節の駆動が最初に止まる時点に基づいて特定する、ことを更に含む、付記1から7のいずれかに記載のモーション生成方法。
(付記9)
前記第2のサブモーションの前記開始側の予備動作の期間を、前記第2のサブモーションの開始端から後側に向かって前記ロボットが備える関節の駆動速度の変化量が所定の条件を満たす変化量を超えて変化した時点に基づいて特定する、ことを更に含む、付記1から6のいずれかに記載のモーション生成方法。
(付記10)
前記第1のサブモーションの前記終了側の予備動作の期間を、前記第1のサブモーションの終了端から前側に向かって前記ロボットが備える関節の駆動速度の変化量が所定の条件を満たす変化量を超えて変化した時点に基づいて特定する、ことを更に含む、付記1から6及び付記9のいずれかに記載のモーション生成方法。
(付記11)
記憶部に記憶されている前記複数のサブモーションのそれぞれの開始側の予備動作及び終了側の予備動作の期間を示す情報に基づいて、前記第1のサブモーションの終了側の予備動作及び前記第2のサブモーションの開始側の予備動作の期間を特定する、ことを更に含む、付記1から付記10のいずれかに記載のモーション生成方法。
(付記12)
前記補完モーションは、前記ペアの第1の姿勢と、前記ペアの第2の姿勢とを繋ぐ動作を線形に補完したモーションである、付記1から付記11のいずれかに記載のモーション生成方法。
(付記13)
ロボットの動作を規定する複数のサブモーションのうちの第1のサブモーションの後に第2のサブモーションを連結してモーションを生成する場合に、前記第1のサブモーションの終了側の予備動作に含まれる1以上の第1の姿勢と、前記第2のサブモーションの開始側の予備動作に含まれる1以上の第2の姿勢とのうちから所定の条件を満たす類似度で類似している第1の姿勢と第2の姿勢とのペアを特定し、
前記ペアの位置で、補完モーションにより前記第1のサブモーションと前記第2のサブモーションとを連結して前記モーションを生成する、
処理を情報処理装置に実行させるモーション生成プログラム。
(付記14)
ロボットの動作を規定する複数のサブモーションのうちの第1のサブモーションの後に第2のサブモーションを連結してモーションを生成する場合に、前記第1のサブモーションの終了側の予備動作に含まれる1以上の第1の姿勢と、前記第2のサブモーションの開始側の予備動作に含まれる1以上の第2の姿勢とのうちから所定の条件を満たす類似度で類似している第1の姿勢と第2の姿勢とのペアを特定する特定部と、
前記ペアの位置で、補完モーションにより前記第1のサブモーションと前記第2のサブモーションとを連結して前記モーションを生成する生成部と、
を含む、情報処理装置。
【符号の説明】
【0120】
200 情報処理装置
201 制御部
202 記憶部
211 特定部
212 生成部
600 ロボット
1800 コンピュータ
1801 プロセッサ
1802 メモリ
1803 記憶装置
1804 読取装置
1805 着脱可能記憶媒体
1806 通信インタフェース
1807 入出力インタフェース
1808 バス