(57)【特許請求の範囲】
【請求項１】
コンピュータが、
ネットワークを介して接続されたクライアント装置において仮想世界が表示され、当該仮想世界上のオブジェクトに対する操作が入力されるよりも前記ネットワークで想定される所定の遅延時間以上前に各時刻における前記オブジェクトに対する操作を予測し、
予測した操作に基づいて各時刻における前記仮想世界上のオブジェクトの状態をシミュレーションし、
各時刻の予測した操作を示す操作情報およびシミュレーションした結果を示すシミュレーション情報を記憶部に登録し、
前記記憶部に記憶されたシミュレーション結果を示すシミュレーション情報を時刻順に前記クライアント装置へ送信し、
前記クライアント装置からオブジェクトに対する操作を受信し、
受信した操作が、前記記憶部に記憶された、当該受信した操作が行われた時刻の予測した操作と所定以上異なる場合、受信した操作に基づいて、前記記憶部に記憶された、当該受信した操作が行われた時刻以降の操作を再予測し、
再予測した操作に基づいて前記受信した操作が行われた時刻以降のオブジェクトの状態を再シミュレーションし、
前記記憶部に記憶された、当該受信した操作が行われた時刻以降の予測した操作およびオブジェクトの状態を、再予測した操作および再シミュレーションしたオブジェクトの状態に更新する
各処理を実行することを特徴とするシミュレーション方法。
【請求項２】
前記記憶部に登録する処理は、各オブジェクト毎に、シミュレーションで影響が及ぶオブジェクトをさらに登録し、
前記再シミュレーションする処理は、操作が再予測されたオブジェクトの状態、および前記記憶部に記憶された、当該操作が再予測されたオブジェクトの影響が及ぶオブジェクトの状態を再シミュレーションすることを特徴とする請求項１に記載のシミュレーション方法。
【請求項３】
前記クライアント装置へ送信する処理は、前記シミュレーション情報と共に前記操作情報をさらに送信し、
クライアント装置が、
送信された前記シミュレーション情報および操作情報を受信し、
受信した操作情報により示される予測した操作がオブジェクトに対する実際の操作と所定以上異なる場合、当該予測した操作と当該実際の操作の差に基づいて、受信した前記シミュレーション情報を補正し、
補正した前記シミュレーション情報に基づいて仮想世界を表示する
各処理をさらに実行することを特徴とする請求項１または２に記載のシミュレーション方法。
【請求項４】
ネットワークを介して接続されたクライアント装置において仮想世界が表示され、当該仮想世界上のオブジェクトに対する操作が入力されるよりも前記ネットワークで想定される所定の遅延時間以上前に各時刻における前記オブジェクトに対する操作を予測する予測部と、
前記予測部により予測した操作に基づいて各時刻における前記仮想世界上のオブジェクトの状態をシミュレーションするシミュレーション部と、
各時刻の予測した操作を示す操作情報およびシミュレーションした結果を示すシミュレーション情報を記憶する記憶部と、
前記記憶部に記憶されたシミュレーション結果を示すシミュレーション情報を時刻順に前記クライアント装置へ送信する送信部と、
前記クライアント装置からオブジェクトに対する操作を受信する受信部と、
前記受信部により受信した操作が、前記記憶部に記憶された、当該受信した操作が行われた時刻の予測した操作と所定以上異なる場合、受信した操作に基づいて、前記記憶部に記憶された、当該受信した操作が行われた時刻以降の操作を再予測する再予測部と、
前記再予測部により再予測した操作に基づいて当該受信した操作が行われた時刻以降のオブジェクトの状態を再シミュレーションする再シミュレーション部と、
前記記憶部に記憶された、当該受信した操作が行われた時刻以降の予測した操作およびオブジェクトの状態を、前記再予測部により再予測した操作および前記再シミュレーション部により再シミュレーションしたオブジェクトの状態に更新する更新部と、
を有することを特徴とするシミュレーション装置。
【請求項５】
コンピュータに、
ネットワークを介して接続されたクライアント装置において仮想世界が表示され、当該仮想世界上のオブジェクトに対する操作が入力されるよりも前記ネットワークで想定される所定の遅延時間以上前に各時刻における前記オブジェクトに対する操作を予測し、
予測した操作に基づいて各時刻における前記仮想世界上のオブジェクトの状態をシミュレーションし、
各時刻の予測した操作を示す操作情報およびシミュレーションした結果を示すシミュレーション情報を記憶部に登録し、
前記記憶部に記憶されたシミュレーション結果を示すシミュレーション情報を時刻順に前記クライアント装置へ送信し、
前記クライアント装置からオブジェクトに対する操作を受信し、
受信した操作が、前記記憶部に記憶された、当該受信した操作が行われた時刻の予測した操作と所定以上異なる場合、受信した操作に基づいて、前記記憶部に記憶された、当該受信した操作が行われた時刻以降の操作を再予測し、
再予測した操作に基づいて前記受信した操作が行われた時刻以降のオブジェクトの状態を再シミュレーションし、
前記記憶部に記憶された、当該受信した操作が行われた時刻以降の予測した操作およびオブジェクトの状態を、再予測した操作および再シミュレーションしたオブジェクトの状態に更新する
各処理を実行させることを特徴とするシミュレーションプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、シミュレーション方法、シミュレーション装置およびシミュレーションプログラムに関する。
【背景技術】
【０００２】
従来からコンピュータ上に仮想的に構築された仮想世界内の複数のオブジェクトの動きを、ネットワークを介して接続された複数のクライアント装置から操作して仮想世界を体験するシミュレーションシステムが提供されている。例えば、このようなシミュレーションシステムとしては、コンピュータ上に仮想的に構築されたレーシングコース上で、複数人がそれぞれのクライアント装置から車両を運転してレースを行うシミュレーションゲームがある。このようなシミュレーションシステムでは、ネットワークの通信の遅延によるクライアント装置の表示内容の食い違いの回避と、各クライアント装置からの操作に対する表示レスポンスの確保の両立が課題となる。
【０００３】
そこで、次のような従来技術が提案されている。例えば、複数のゲーム装置をネットワークを介して接続した対戦型レースゲームにおいて、各ゲーム装置は、ゲーム装置を操作するプレイヤー自身が運転する車両の挙動を計算し、計算した車両の挙動を他のゲーム装置に通信ネットワークを経由して送信する。また、各ゲーム装置は、他のゲーム装置から受け取った他の車両の挙動の情報から他の車両の現在の挙動を予測する。そして、各ゲーム装置は、計算したプレイヤー自身が運転する車両の挙動と、予測した他の車両の挙動とを表示する。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００６−３２０５０２号公報
【特許文献２】特開２００４−１０５６７１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、従来技術は、それぞれ車両の挙動の計算や予測を各クライアント装置で行うため、各クライアント装置がシミュレーションに要する各種の情報やシミュレーションプログラムを保持する必要があり、クライアント装置の構成が複雑になる。
【０００６】
開示の技術は、上記に鑑みてなされたものであって、クライアント装置を複雑な構成にすることなくシミュレーションを行うことができるシミュレーション方法、シミュレーション装置およびシミュレーションプログラムを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本願の開示するシミュレーション方法は、コンピュータが、ネットワークを介して接続されたクライアント装置において仮想世界上のオブジェクトに対する操作が入力されるよりもネットワークの遅延時間以上前にオブジェクトに対する操作を予測する。シミュレーション方法は、コンピュータが、予測した操作に基づいて仮想世界上のオブジェクトの状態をシミュレーションする。シミュレーション方法は、コンピュータが、予測した操作を示す操作情報およびシミュレーションした結果を示すシミュレーション情報を記憶部に登録する。シミュレーション方法は、コンピュータが、記憶部に記憶されたシミュレーション結果を示すシミュレーション情報を時刻順にクライアント装置へ送信する。シミュレーション方法は、コンピュータが、クライアント装置からオブジェクトに対する操作を受信する。シミュレーション方法は、コンピュータが、受信した操作が、記憶部に記憶された、当該受信した操作が行われた時刻の予測した操作と所定以上異なる場合、受信した操作に基づいて、記憶部に記憶された、当該受信した操作が行われた時刻以降の操作を再予測する。シミュレーション方法は、コンピュータが、再予測した操作に基づいて前記受信した操作が行われた時刻以降のオブジェクトの状態を再シミュレーションする。シミュレーション方法は、コンピュータが、記憶部に記憶された、当該受信した操作が行われた時刻以降の予測した操作およびオブジェクトの状態を、再予測した操作および再シミュレーションしたオブジェクトの状態に更新する。
【発明の効果】
【０００８】
本願の開示するシミュレーション方法によれば、クライアント装置の構成を複雑にすることなくシミュレーションを行うことができる。
【図面の簡単な説明】
【０００９】
【図１】図１は、実施例１に係るシミュレーションシステムの構成を示す図である。
【図２】図２は、シミュレーションを行う仮想世界の一例を示す図である。
【図３】図３は、クライアントにおいて表示される映像の一例を示す図である。
【図４】図４は、実施例１に係るクライアントの機能的構成を示すブロック図である。
【図５】図５は、実施例１に係るサーバの機能的構成を示すブロック図である。
【図６】図６は、実施例１に係るシミュレーション結果データの構成例を示す図である。
【図７】図７は、シミュレーションの流れを示すタイムチャートである。
【図８】図８は、実施例１に係るシミュレーション結果データの構成例を示す図である。
【図９】図９は、実施例１に係るシミュレーションシステムにより求めた車両の移動経路の一例を示す図である。
【図１０】図１０は、サーバが受信した操作情報に基づいて車両の挙動を計算した場合の車両の移動経路の一例を示す図である。
【図１１】図１１は、実施例１に係るシミュレーション処理の手順を示すフローチャートである。
【図１２】図１２は、実施例１に係る制御処理の手順を示すフローチャートである。
【図１３】図１３は、実施例２に係るシミュレーション結果データの構成例を示す図である。
【図１４】図１４は、実施例２に係るシミュレーション結果データの構成例を示す図である。
【図１５】図１５は、実施例２に係るシミュレーション処理の手順を示すフローチャートである。
【図１６】図１６は、実施例３に係るクライアントの機能的構成を示すブロック図である。
【図１７】図１７は、シミュレーションシステムにより求めた車両の移動経路の一例を示す図である。
【図１８】図１８は、実施例３に係る制御処理の手順を示すフローチャートである。
【発明を実施するための形態】
【００１０】
以下に、本願の開示するシミュレーション方法、シミュレーション装置およびシミュレーションプログラムの実施例を図面に基づいて詳細に説明する。なお、この実施例は開示の技術を限定するものではない。そして、各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１１】
［システム構成］
まず、本実施例に係るシミュレーションシステムの構成について説明する。図１は、実施例１に係るシミュレーションシステムの構成を示す図である。シミュレーションシステム１０は、サーバ１２上に仮想的に構築された仮想世界内の複数のオブジェクトの動きを１つまたは複数のクライアント１１からユーザが操作して仮想世界を体験するものである。本実施例では、サーバ１２が仮想世界として道路空間を構築し、オブジェクトとして道路空間内の車両をクライアント１１からユーザが操作して仮想世界を体験する場合を例にして説明する。
【００１２】
図１に示すように、シミュレーションシステム１０は、クライアント１１と、サーバ１２とを有する。なお、図１の例では、１つのクライアント１１を有する場合を例示したが、開示のシステムはこれに限定されず、クライアント１１を任意の数とすることができる。
【００１３】
これらサーバ１２およびクライアント１１の間は、ネットワーク１３を介して通信可能に接続される。かかるネットワーク１３には、有線または無線を問わず、インターネット、ＬＡＮ（Local  Area  Network）やＶＰＮ（Virtual  Private  Network）などの任意の通信網を採用できる。
【００１４】
サーバ１２は、シミュレーション対象とする仮想世界を構築してクライアント１１へ提供し、クライアント１１から操作に応じて仮想世界内の複数のオブジェクトの状態変化をリアルタイムで計算する装置であり、例えば、サーバコンピュータなどである。かかるサーバ１２は、１台のサーバコンピュータとして実装することとしてもよく、また、複数台のサーバコンピュータによるクラウドとして実装することもできる。なお、本実施例では、サーバ１２を１台のサーバコンピュータとした場合を例として説明する。本実施例では、サーバ１２は、シミュレーション対象とする仮想世界として道路空間を構築してクライアント１１へ提供し、クライアント１１から操作に応じて道路空間内の複数の車両の状態変化をリアルタイムで計算する。
【００１５】
クライアント１１は、サーバ１２に構築された仮想世界をユーザが体験するための装置である。クライアント１１は、出力部３０と、操作入力部３１とを装置内または装置外に備える。なお、図１の例では、クライアント１１が出力部３０および操作入力部３１を１つずつ備えた場合を例示するが、クライアント１１が出力部３０および操作入力部３１を複数備えてもよい。
【００１６】
出力部３０は、サーバ１２が提供する仮想世界の映像や音声、振動などユーザが仮想世界を体験するための各種情報を出力する。例えば、出力部３０は、車両の運転者席に着座した利用者が、シミュレートされた仮想世界内で車両を運転したときに体験する視界映像、走行音、振動などを出力する。
【００１７】
操作入力部３１は、ユーザから仮想世界内のオブジェクトの動きを指定する操作を受け付ける。例えば、操作入力部３１は、道路空間内を走行する車両を運転するためのハンドル操作、アクセル操作やブレーキ操作を受け付ける。
【００１８】
［シミュレーション対象とする仮想世界の例］
次に、本実施例に係るシミュレーションシステム１０によりシミュレーションを行う仮想世界について説明する。図２は、シミュレーションを行う仮想世界の一例を示す図である。図２の例では、仮想世界として２車線の道路上が構築されている。また、図２の例では、オブジェクトとして道路空間内を走行する車両が設けられている。図２の例では、２車線の道路上を３台の車両２１〜２３が走行している。車両２１は、クライアント１１から運転操作を行う操作対象車両である。車両２２、２３は、サーバ１２上で動作する所定の走行プログラムにより挙動を決定して走行させる自動走行車両である。また操作対象の車両２１の右後方には、自動走行の車両２２が走行している。操作対象の車両２１の前方には、自動走行の車両２３が走行している。
【００１９】
図３は、クライアントにおいて表示される映像の一例を示す図である。なお、図３は、図２の場面で車両２１を操作するクライアント１１の出力部３０に表示される映像の例である。図３の例は、運転席から前方を見た視界の映像であり、フロントウィンドウ２５の先に、前方を走行する自動走行の車両２３が見えており、またバックミラー２６には、右後方を走行する自動走行の車両２２が見えている。
【００２０】
なお、図２および図３の例では、車両が３台の場合について説明したが、車両は３台に限らず、多数であってよい。また、複数の異なるクライアント１１でそれぞれ運転操作を行う操作対象の車両が複数存在していてもよい。
【００２１】
［クライアント１１の構成］
次に、本実施例に係るシミュレーションシステム１０に含まれるクライアント１１の機能的構成について説明する。図４は、実施例１に係るクライアントの機能的構成を示すブロック図である。図４に示すように、クライアント１１は、出力部３０と、操作入力部３１と、通信Ｉ／Ｆ（インタフェース）部３２と、記憶部３３と、制御部３４とを有する。
【００２２】
出力部３０は、仮想世界に関する各種の情報を出力する出力デバイスである。かかる出力部３０の一態様としては、ディスプレイ、スピーカ、振動装置などである。出力部３０は、制御部３４から入力する各種信号に基づいて、利用者が仮想世界を体験するための映像や音響、振動などを出力する。例えば、利用者による操作対象のオブジェクトが車両である場合、出力部３０は、車両の運転者席に着座した利用者が、シミュレートされた仮想世界内で車両を運転したときに体験する視界映像、走行音、振動を出力する。
【００２３】
操作入力部３１は、ユーザから各種の操作入力を受け付ける入力デバイスである。かかる操作入力部３１の一態様としては、ハンドルやレバー、アクセルペダル、ブレーキペダルなど車両の操作に用いる操作デバイスを備えたコントローラなどである。操作入力部３１の他の一態様としては、ボタン、キーボード、マウス、タッチパネルなどである。操作入力部３１は、利用者からの操作入力を受け付け、受け付けた操作内容を示す操作情報を制御部３４に出力する。ここで、例えば、利用者による操作対象のオブジェクトが車両である場合、操作入力部３１が受け付ける利用者の操作入力は、車両を運転するためのハンドルや、アクセルペダル、ブレーキペダルの操作などである。ハンドルやペダルのかわりに、マウスなどで操作を入力してもよい。
【００２４】
通信Ｉ／Ｆ部３２は、他の装置、例えばサーバ１２との間で通信制御を行うインタフェースである。通信Ｉ／Ｆ部３２は、ネットワーク１３を介してサーバ１２と各種情報を送受信する。例えば、通信Ｉ／Ｆ部３２は、構築した仮想世界を示す各種の画面の画像情報や音声情報、振動情報などクライアント１１で仮想世界を体験するために用いる各種情報を受信する。また、通信Ｉ／Ｆ部３２は、仮想世界内を走行する車両に対する操作内容を示す操作情報をサーバ１２へ送信する。かかる通信Ｉ／Ｆ部３２の一態様としては、ＬＡＮカードなどのネットワークインタフェースカードを採用できる。
【００２５】
記憶部３３は、フラッシュメモリなどの半導体メモリ素子、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部３３は、上記の種類の記憶装置に限定されるものではなく、ＲＡＭ（Random  Access  Memory)、ＲＯＭ（Read  Only  Memory)であってもよい。
【００２６】
記憶部３３は、制御部３４で実行され、クライアント１１を制御するＯＳ（Operating  System）や、映像や音声、振動の出力を制御する各種プログラムを記憶する。さらに、記憶部３３は、制御部３４で実行されるプログラムで使用する各種データを記憶する。かかるデータの一例として、記憶部３３は、現在時刻４０と、出力用データ４１とを記憶する。
【００２７】
現在時刻４０は、現在の正確な時刻を示すデータである。本実施例では、サーバ１２と全てのクライアント１１とで同期して同じ時刻を保持する。例えば、サーバ１２とクライアント１１が、時刻を保持する同じ時刻同期サーバにＮＴＰ（Network  Time  Protocol）を用いてアクセスして同じ時刻を保持するものとする。この現在時刻４０は、図示しない時刻制御部により更新される。この時刻制御部の一例としては、ＯＳやＲＴＣ（Real  Time  Clock）回路が挙げられる。一例として、現在時刻４０は、後述の出力制御部５３によって参照される。
【００２８】
出力用データ４１は、サーバ１２から随時送信された仮想世界内の車両のシミュレーション結果を示すデータである。この出力用データ４１は、シミュレーション対象時刻と、当該シミュレーション対象時刻において出力する映像、走行音、振動など仮想世界を体験するために出力する各種情報が含まれる。一例として、出力用データ４１は、後述の受信部５２によって格納される。他の一例として、出力用データ４１は、後述の出力制御部５３によって参照される。
【００２９】
制御部３４は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。制御部３４には、各種の集積回路や電子回路を採用できる。例えば、集積回路としては、ＡＳＩＣ（Application  Specific  Integrated  Circuit）が挙げられる。また、電子回路としては、ＣＰＵ（Central  Processing  Unit）やＭＰＵ（Micro  Processing  Unit）などが挙げられる。制御部３４は、図４に示すように、操作検出部５０と、送信部５１と、受信部５２と、出力制御部５３とを有する。
【００３０】
操作検出部５０は、操作入力部３１に対する各種の操作を検出する処理部である。例えば、操作検出部５０は、操作入力部３１から入力する操作情報に基づき、仮想世界内を走行する車両に対する操作内容を所定の周期で検出し、操作された操作時刻および検出した操作内容を含んだ操作情報を生成する。
【００３１】
送信部５１は、操作情報を送信する処理部である。例えば、送信部５１は、操作検出部５０により生成された操作情報を通信Ｉ／Ｆ部３２経由でサーバ１２へ送信する。
【００３２】
受信部５２は、シミュレーション結果を示すシミュレーション情報を受信する処理部である。例えば、受信部５２は、通信Ｉ／Ｆ部３２を介してサーバ１２からシミュレーション情報を受信する。受信部５２は、受信したシミュレーション情報を出力用データ４１として記憶部３３に格納する。
【００３３】
出力制御部５３は、出力部３０への各種情報の出力を制御する処理部である。例えば、出力制御部５３は、記憶部３３に記憶された現在時刻４０を参照し、出力用データ４１から現在時刻４０に対応するシミュレーション対象時刻のシミュレーション情報を読み出す。そして、出力制御部５３は、読み出したシミュレーション情報に基づき、映像、走行音、振動などの出力を指示する各種信号を出力部３０へ出力する。これにより、出力部３０は、制御部３４から入力する各種信号に基づいて、利用者が仮想世界を体験するための映像や音響、振動などを出力する。
【００３４】
［サーバ１２の構成］
次に、本実施例に係るシミュレーションシステム１０に含まれるサーバ１２の機能的構成について説明する。図５は、実施例１に係るサーバの機能的構成を示すブロック図である。図５に示すように、サーバ１２は、通信Ｉ／Ｆ部６０と、記憶部６１と、制御部６２とを有する。
【００３５】
通信Ｉ／Ｆ部６０は、他の装置、例えばクライアント１１との間で通信制御を行うインタフェースである。通信Ｉ／Ｆ部６０は、ネットワーク１３を介してクライアント１１と各種情報を送受信する。例えば、通信Ｉ／Ｆ部６０は、構築した仮想世界を示す各種の画面の画像情報や音声情報、振動情報などクライアント１１で仮想世界を体験するために用いる各種情報をクライアント１１へ送信する。また、通信Ｉ／Ｆ部６０は、クライアント１１から仮想世界内を走行する車両に対する操作内容を示す操作情報を受信する。かかる通信Ｉ／Ｆ部６０の一態様としては、ＬＡＮカードなどのネットワークインタフェースカードを採用できる。
【００３６】
記憶部６１は、フラッシュメモリなどの半導体メモリ素子、ハードディスク、光ディスクなどの記憶装置である。なお、記憶部６１は、上記の種類の記憶装置に限定されるものではなく、ＲＡＭ、ＲＯＭであってもよい。
【００３７】
記憶部６１は、制御部６２で実行され、サーバ１２を制御するＯＳや後述するシミュレーションを行うプログラムなど各種プログラムを記憶する。さらに、記憶部６１は、制御部６２で実行されるプログラムで使用する各種データを記憶する。かかるデータの一例として、記憶部６１は、現在時刻７０と、予測遅延時間７１と、シミュレーション対象時刻７２と、オブジェクトデータ７３と、環境データ７４と、シミュレーション結果データ７５とを記憶する。
【００３８】
現在時刻７０は、現在の正確な時刻を示すデータである。本実施例では、上述したように、サーバ１２と全てのクライアント１１とで同期して同じ時刻を保持する。この現在時刻７０は、図示しない時刻制御部により更新される。この時刻制御部の一例としては、ＯＳやＲＴＣ回路が挙げられる。一例として、現在時刻７０は、後述の予測部８０、シミュレーション部８１、送信部８４によって参照される。
【００３９】
予測遅延時間７１は、ネットワーク１３を介してサーバ１２とクライアント１１が通信を行う際に想定される遅延時間を示すデータである。この予測遅延時間７１は、例えば、過去一定時間における、サーバ１２とクライアント１１の通信遅延時間の最大値または平均値に既定の調整値を加えた値などとして求めてもよい。予測遅延時間７１は、サーバ１２が複数のクライアント１１と接続している場合、例えば、遅延が最大のものを採用する。一例として、予測遅延時間７１は、後述の予測部８０、シミュレーション部８１、送信部８４によって参照される。
【００４０】
シミュレーション対象時刻７２は、次にオブジェクトの状態の計算を行う場合の対象時刻を示すデータである。一例として、シミュレーション対象時刻７２は、後述の予測部８０、シミュレーション部８１によって参照、更新される。
【００４１】
ここで、一般に、シミュレーションの計算は、シミュレーション対象時刻７２を一定の間隔で進めながら、あるシミュレーション対象時刻７２についての仮想世界内のオブジェクト状態を計算する。例えば、シミュレーション対象時刻７２を１ステップあたり０．０２秒ずつ進め、あるシミュレーション対象時刻７２における仮想世界内のオブジェクト状態を計算する。これを、実際の現在時刻の進み方に合わせて繰り返すことにより、仮想世界内のオブジェクトの連続的な変化をリアルタイムでシミュレートすることができる。本実施例では、現在時刻７０よりも予測遅延時間７１以上先の時刻をシミュレーション対象時刻７２とし、実際の現在時刻の進み方に合わせてシミュレーション対象時刻７２を所定時間ずつ進めながら、仮想世界内のオブジェクト状態を計算する。
【００４２】
オブジェクトデータ７３は、シミュレーションを行うオブジェクトに関する各種情報を示すデータである。例えば、オブジェクトデータ７３には、車両の挙動を計算するためのモデルや各種のパラメータが含まれる。一例として、オブジェクトデータ７３は、後述のシミュレーション部８１、再シミュレーション部８７によって参照される。
【００４３】
環境データ７４は、シミュレーションの対象とする仮想世界に関する各種情報を示すデータである。例えば、環境データ７４には、道路の形状、車線、信号の位置などの道路空間を構築するための各種のデータが含まれる。一例として、環境データ７４は、後述のシミュレーション部８１、再シミュレーション部８７によって参照される。
【００４４】
シミュレーション結果データ７５は、各時刻のシミュレーションされた計算結果が記憶されたデータである。一例として、シミュレーション結果データ７５は、後述の登録部８２によって格納される。他の一例として、シミュレーション結果データ７５は、後述のシミュレーション部８１、送信部８４、再シミュレーション部８７によって参照される。他の一例として、シミュレーション結果データ７５は、後述の更新部８８によって更新される。他の一例として、シミュレーション結果データ７５は、後述の削除部８３によりデータが削除される。
【００４５】
図６は、実施例１に係るシミュレーション結果データの構成例を示す図である。図６に示すように、シミュレーション結果データ７５は、「シミュレーション時刻」の項目を有する。また、シミュレーション結果データ７５は、仮想世界内の各オブジェクトの状態を記憶する領域を有する。本実施例では、オブジェクトとして車両２１〜２３の状態を記憶する領域を有する。車両２１〜２３の状態を記憶する領域は、操作対象車両である場合、「操作入力」、「位置座標」、「その他状態変数」の各項目に分かれており、自動走行車両である場合、「位置座標」、「その他状態変数」の各項目に分かれている。図６の例では、車両２１の状態を記憶する領域が「操作入力」、「位置座標」、「その他状態変数」の各項目に分かれ、車両２２、２３の状態を記憶する領域が「位置座標」、「その他状態変数」の各項目に分かれている。
【００４６】
シミュレーション時刻の項目は、シミュレーションを行ったシミュレーション対象時刻を格納する領域である。操作入力は、予測された車両に対する操作、または実際に操作された車両に対する操作を格納する領域である。位置座標の項目は、車両の位置を示す座標を格納する領域である。その他状態変数の項目は、シミュレーションに用いた各種の状態変数を格納する領域である。
【００４７】
図６の例は、時刻Ｔ０において、車両２１は、ｕ１Ｔ０、・・・、ｕｎＴ０の操作があり、座標位置がｐｘＴ０、ｐｙＴ０、ｐｚＴ０であり、その他状態変数がｓ１Ｔ０、・・・、ｓｎＴ０であることを示す。また、時刻Ｔ０において、車両２２は、座標位置がｐｂｘＴ０、ｐｂｙＴ０、ｐｂｚＴ０であり、その他状態変数がｓｂ１Ｔ０、・・・、ｓｂｎＴ０であることを示す。また、時刻Ｔ０において、車両２３は、座標位置がｐｃｘＴ０、ｐｃｙＴ０、ｐｃｚＴ０であり、その他状態変数がｓｃ１Ｔ０、・・・、ｓｂｎＴ０であることを示す。
【００４８】
図５に戻り、制御部６２は、各種の処理手順を規定したプログラムや制御データを格納するための内部メモリを有し、これらによって種々の処理を実行する。制御部６２には、各種の集積回路や電子回路を採用できる。例えば、集積回路としては、ＡＳＩＣが挙げられる。また、電子回路としては、ＣＰＵやＭＰＵなどが挙げられる。制御部６２は、図５に示すように、予測部８０と、シミュレーション部８１と、登録部８２と、削除部８３と、送信部８４と、受信部８５と、再予測部８６と、再シミュレーション部８７と、更新部８８とを有する。
【００４９】
このうち、予測部８０は、オブジェクトに対する操作を予測する処理部である。一例として、予測部８０は、クライアント１１において車両に対する操作が入力されるよりも予測遅延時間７１に記憶された遅延時間以上前に各時刻における車両に対する操作を予測する。例えば、予測部８０は、現在時刻７０よりも予測遅延時間７１に記憶された遅延時間以上先としたシミュレーション対象時刻７２におけるクライアント１１での車両に対する操作を予測する。この操作の予測方法は、何れの方式を用いてもよい。例えば、予測部８０は、それぞれクライアント１１から受信した直前の操作が継続されるものとしてシミュレーション対象時刻７２の操作を予測してもよい。また、予測部８０は、それぞれクライアント１１から受信した直前の所定時間の操作量の平均値をシミュレーション対象時刻７２の操作と予測してもよい。また、予測部８０は、ハンドルが操舵された場合やペダルの踏み込み量が変化した場合、ハンドルの回転速度や踏み込み量の変化を維持するものとしてシミュレーション対象時刻７２の操作を予測してもよい。また、予測部８０は、予測されたシミュレーション対象時刻７２の操作が所定の許容範囲を超える場合、許容範囲内に補正してもよい。また、予測部８０は、予測された操作に１以下の所定の係数を乗算してシミュレーション対象時刻７２の操作としてもよい。
【００５０】
シミュレーション部８１は、仮想世界上のオブジェクトの状態をシミュレーションする処理部である。一例として、シミュレーション部８１は、予測部８０により予測した操作に基づいて各時刻における仮想世界上のオブジェクトの状態をシミュレーションする。例えば、シミュレーション部８１は、環境データ７４に基づき、シミュレーション対象とする道路空間を構築する。また、シミュレーション部８１は、現在時刻７０よりも予測遅延時間７１に記憶された遅延時間以上先の時刻をシミュレーション対象時刻７２とする。そして、シミュレーション部８１は、オブジェクトデータ７３およびシミュレーション結果データ７５に基づき、１ステップ前のシミュレーション対象時刻７２の各車両に対して、それぞれ予測した操作が行われた場合の車両の位置など車両の挙動を計算する。シミュレーション部８１は、シミュレーション対象時刻７２での車両の挙動の計算が完了すると、シミュレーション対象時刻７２を一定時間進め、次のシミュレーション対象時刻７２で車両の挙動の計算を行う。
【００５１】
登録部８２は、シミュレーション結果を記憶部６１に登録する処理部である。例えば、登録部８２は、予測部８０により予測した各時刻の操作を示す操作情報、シミュレーション部８１によるシミュレーション結果を示す情報、シミュレーションに用いた各種の状態変数などの情報をシミュレーション結果データ７５に登録する。
【００５２】
図６は、シミュレーション対象時刻Ｔ３について、操作入力予測およびオブジェクト状態の計算を行った直後の例である。図６の例では、シミュレーション対象時刻Ｔ０からＴ３までの予測した操作の履歴およびオブジェクトの状態の履歴が保持されている。例えば、シミュレーション対象時刻Ｔ０における予測した操作の値、ｕ１Ｔ０、・・・、ｕｎＴ０などが保持されている。予測した操作は、実際には主に数値として保持され、それぞれの値が、たとえばハンドルの操作量、ペダルの操作量などの、操作入力値に対応する。その他のシミュレーション対象時刻についても、予測した操作やオブジェクトの状態が、操作入力値や、オブジェクトの位置座標の値、オブジェクトの状態を表す状態変数の値などとして保持される。
【００５３】
シミュレーション結果データ７５には、過去規定時間分、あるいは既定ステップ分、予測した操作を示す操作情報、オブジェクトの状態、シミュレーションに用いた各種の状態変数などの情報を履歴として保持する。
【００５４】
削除部８３は、過去規定時間分、あるいは既定ステップ分以上経過したシミュレーション対象時刻のデータをシミュレーション結果データ７５から削除する。例えば、削除部８３は、現在時刻７０から予測遅延時間７１に記憶された遅延時間の２倍以上後となったシミュレーション対象時刻のデータをシミュレーション結果データ７５から削除する。
【００５５】
送信部８４は、クライアント１１で仮想世界を体験するために用いる各種情報をクライアント１１へ送信する処理部である。一例として、送信部８４は、シミュレーション結果を示すシミュレーション情報を時刻順に通信Ｉ／Ｆ部６０を介してクライアント１１へ送信する。例えば、送信部８４は、シミュレーション結果データ７５からシミュレーション対象時刻が最も後の、すなわち、現在時刻７０から予測遅延時間７１に記憶された遅延時間分以上先の時刻の各車両の位置座標をクライアント１１へ送信する。
【００５６】
受信部８５は、オブジェクトに対する操作内容を示す操作情報を受信する処理部である。例えば、受信部８５は、通信Ｉ／Ｆ部６０を介してクライアント１１から仮想世界内を走行する車両に対する操作内容を示す操作情報を受信する。この操作情報には、操作内容を示す情報と共に操作された操作時刻が含まれている。
【００５７】
再予測部８６は、操作の再予測を行う処理部である。一例として、再予測部８６は、受信した操作が、当該受信した操作が行われた時刻の予測した操作と所定以上異なる場合、操作の再予測を行う。例えば、再予測部８６は、受信部８５でいずれかのクライアント１１での操作情報を受信した場合、操作情報により示される受信した操作が、シミュレーション結果データ７５の当該受信した操作が行われた時刻の予測した操作と所定以上異なるか否か判定する。再予測部８６は、判定の結果、受信した操作が予測した操作と所定以上異なる場合、受信した操作に基づいて、当該受信した操作が行われた時刻以降の操作を再予測する。この操作の再予測方法は、何れの方式を用いてもよい。例えば、再予測部８６は、予測部８０で用いた予測方法を同じ予測方法を用いて再予測を行う。再予測部８６は、再予測した操作を再予測前の操作と比較し、差分が既定の閾値以上である場合は、シミュレーション対象時刻７２を一定時間進め、次のシミュレーション対象時刻７２で操作を再予測を行う。
【００５８】
再シミュレーション部８７は、仮想世界上のオブジェクトの状態を再シミュレーションする処理部である。一例として、再シミュレーション部８７は、再予測部８６において再予測された操作が以前の操作と異なる場合、再予測した操作に基づいて受信した操作が行われた時刻以降のオブジェクトの状態を再シミュレーションする。例えば、再シミュレーション部８７は、環境データ７４に基づき、シミュレーション対象とする道路空間を構築する。また、再シミュレーション部８７は、操作が行われた時刻をシミュレーション対象時刻７２とする。そして、再シミュレーション部８７は、オブジェクトデータ７３およびシミュレーション結果データ７５に基づき、１ステップ前のシミュレーション対象時刻７２の各車両に対して、それぞれ再予測した操作が行われた場合の車両の挙動を計算する。再シミュレーション部８７は、再シミュレーションした車両の挙動を再シミュレーション前の車両の挙動と比較し、差分が既定の閾値以上である場合は、シミュレーション対象時刻７２を一定時間進め、次のシミュレーション対象時刻７２で車両の挙動の計算を行う。
【００５９】
更新部８８は、記憶部６１に記憶されシミュレーション結果データ７５を更新する処理部である。一例として、更新部８８は、シミュレーション結果データ７５の受信した操作が行われた時刻以降の予測した操作およびオブジェクトの状態を、再予測した操作および再シミュレーションしたオブジェクトの状態に更新する。例えば、更新部８８は、再予測部８６により再予測された操作が以前の操作と異なる場合、再予測した操作に更新する。また、更新部８８は、再シミュレーション部８７により再シミュレーションされた車両の挙動が以前の挙動と異なる場合、再シミュレーションした車両の挙動に更新する。
【００６０】
［タイムチャート］
次に、タイムチャートを用いてシミュレーションシステム１０によるシミュレーションの流れを説明する。図７は、シミュレーションの流れを示すタイムチャートである。図７の例では、シミュレーション対象時刻、再計算時刻および現在時刻の流れを上下方向の線により示している。また、図７の例では、シミュレーション対象時刻および現在時刻の線の脇に括弧で対象とする時刻を示し、再計算時刻の線の脇に括弧で再計算するシミュレーション対象時刻の範囲を示している。
【００６１】
サーバ１２は、クライアント１１において仮想世界上の車両に対する操作が入力されるよりもネットワーク１３の遅延時間以上前に各時刻における車両に対する操作を予測して各時刻における車両の挙動をシミュレーションする。そして、サーバ１２は、シミュレーション結果を示すシミュレーション情報を時刻順にクライアント１１へ送信する。例えば、図７の例では、サーバ１２は、クライアント１１の現在時刻がＴ１となる前にシミュレーション対象時刻Ｔ１での車両に対する操作を予測して車両の挙動をシミュレーションする。そして、サーバ１２は、シミュレーション対象時刻Ｔ１のシミュレーション結果を示すシミュレーション情報をクライアント１１へ送信する。サーバ１２は、シミュレーション対象時刻Ｔ２、Ｔ３についても同様に、順次、操作を予測して車両の挙動をシミュレーションを行い、シミュレーション結果を示すシミュレーション情報をクライアント１１へ送信する。
【００６２】
クライアント１１は、現在時刻がシミュレーション対象時刻となると、シミュレーション対象時刻となったシミュレーション情報に基づいて映像・音響の生成および出力を行う。そして、クライアント１１は、ユーザから受け付けた操作内容を示す操作情報をサーバ１２へ送信する。図７の例では、クライアント１１は、クライアント１１の現在時刻がＴ１となるとシミュレーション対象時刻Ｔ１でのシミュレーション情報に基づいて映像・音響の生成および出力を行う。そして、クライアント１１は、時刻Ｔ１でユーザから受け付けた操作内容を示す操作情報をサーバ１２へ送信する。
【００６３】
サーバ１２は、クライアント１１から操作情報を受信すると、受信した操作情報の操作と、当該操作が行われた時刻の予測した操作とを比較する。サーバ１２は、受信した操作情報の操作が予測した操作と所定以上異なる場合、受信した操作情報の操作に基づいて、当該受信した操作情報の操作が行われた時刻以降の操作を再予測する。そして、サーバ１２は、再予測した操作に基づいて、受信した操作情報の操作が行われた時刻以降の車両の挙動を再シミュレーションする。図７の例では、サーバ１２は、クライアント１１から受信した時刻Ｔ１の操作情報の操作がシミュレーション対象時刻Ｔ１の予測した操作と所定以上異なる場合、シミュレーション対象時刻Ｔ１〜Ｔ３の操作を再予測する。そして、サーバ１２は、再予測した操作に基づいてシミュレーション対象時刻Ｔ１〜Ｔ３について車両の挙動を再シミュレーションし、シミュレーション対象時刻Ｔ１〜Ｔ３のシミュレーション結果データ７５を更新する。
【００６４】
そして、サーバ１２は、シミュレーション対象時刻Ｔ４に進め、車両に対する操作を予測し、１ステップ前のシミュレーション対象時刻Ｔ３の各車両に対して、それぞれ予測した操作が行われた場合の車両の位置など車両の挙動を計算する。
【００６５】
図８は、実施例１に係るシミュレーション結果データの構成例を示す図である。図８の例では、クライアント１１から受信した時刻Ｔ１の操作情報の操作がシミュレーション対象時刻Ｔ１の予測した操作と所定以上異なるため、時刻Ｔ１の操作が、実際の操作ｕ１’Ｔ１、・・・、ｕｎ’Ｔ１に更新されている。また、図８の例では、時刻Ｔ２〜Ｔ３についても、操作入力、位置座標、その他状態変数の項目が再計算の対象となり、前時刻の更新された値に基づいて操作およびオブジェクトの状態が再計算されて更新される。図８の例では、時刻Ｔ４については、更新されたＴ１〜Ｔ３の情報に基づいて操作の予測および車両の挙動のシミュレーションが行われている。なお、実際に再計算される部分は、前時刻での更新前後の差分が既定の閾値以上の部分および差分が既定の閾値以上の部分を参照して計算される部分のみであり、それ以外の部分は再計算されない。時刻Ｔ４における予測された操作および車両の挙動は、直前にクライアント１１から受け取った実際の操作の情報に基づいて再計算された操作および車両の挙動に基づいて計算されるため、実際の操作が反映される前よりも現在の状態に近い状態となる。
【００６６】
次に、本実施例に係るシミュレーションシステム１０により求まる車両の挙動の一例を説明する。図９は、実施例１に係るシミュレーションシステムにより求めた車両の移動経路の一例を示す図である。図９の例では、時刻Ｔ０まではハンドルが直進状態であり、時刻Ｔ１において、ハンドルを左に切る操作が行われたものとする。図９の例では、ハンドルを左に切る操作により時刻Ｔ０〜Ｔ８において車両２２が通過すべき本来の位置をＲＴ０、ＲＴ１・・・ＲＴ８により示している。また、図９の例では、ハンドルを左に切る操作により車両２２が通過すべき本来の経路を一点鎖線により示している。また、図９の例では、時刻Ｔ０〜Ｔ８においてサーバ１２からクライアント１１に通知される車両２２の位置をＰＴ０、ＰＴ１・・・ＰＴ８により示している。また、図９の例では、時刻Ｔ１の操作情報により再計算されてサーバ１２からクライアント１１に通知される車両２２の位置をＰ’Ｔ２、Ｐ’Ｔ３により示している。
【００６７】
サーバ１２は、時刻Ｔ３まで、時刻Ｔ０の操作入力に基づく計算により、車両２２がＰＴ０からＰＴ３の経路を通るように車両の挙動を計算する。ここでは、サーバ１２は、時刻Ｔ４の車両の状態を計算する前に、クライアント１１から時刻Ｔ１においてハンドルを切ったという操作情報を受け取ったものとする。この場合、サーバ１２は、時刻Ｔ１の操作情報に基づいて、時刻Ｔ２およびＴ３における操作を再予測して車両の挙動を再シミュレーションする。これにより、時刻Ｔ２およびＴ３における車両２２の位置は、Ｐ’Ｔ２およびＰ’Ｔ３に修正される。サーバ１２は、Ｐ’Ｔ２およびＰ’Ｔ３の車両の位置に基づいて時刻Ｔ４のオブジェクト状態計算を行う。このため、時刻Ｔ４における車両２２の位置は、本来の位置ＲＴ４に近いＰＴ４となる。このＰＴ４の位置を含んだ情報がクライアント１１に送信され、当該情報に基づいてクライアント１１で表示が行われるため、操作入力に対する高い追従性を実現できる。
【００６８】
ここで、比較のため、サーバ１２が本実施例の制御を行わず、単にサーバ１２が受信した操作情報に基づいて車両の挙動を計算する場合を説明する。図１０は、サーバが受信した操作情報に基づいて車両の挙動を計算した場合の車両の移動経路の一例を示す図である。図１０の例でも、時刻Ｔ０まではハンドルが直進状態であり、時刻Ｔ１において、ハンドルを左に切る操作が行われたものとする。図１０の例では、ハンドルを左に切る操作により時刻Ｔ０〜Ｔ８において車両２２が通過すべき本来の位置をＲＴ０、ＲＴ１・・・ＲＴ８により示している。また、図１０の例では、ハンドルを左に切る操作により車両２２が通過すべき本来の経路を一点鎖線により示している。また、図１０の例では、時刻Ｔ０〜Ｔ８においてサーバ１２からクライアント１１に通知される車両２２の位置をＱＴ０、ＱＴ１・・・ＱＴ８により示している。
【００６９】
ここでは、サーバ１２は、時刻Ｔ４の車両の状態を計算する前に、クライアント１１から時刻Ｔ１においてハンドルを切ったという操作情報を受け取ったものとする。サーバ１２は、時刻Ｔ３までハンドルが直進状態であるものとして、車両２２がＱＴ０からＱＴ３の経路を通るように車両の挙動を計算する。そして、サーバ１２は、時刻Ｔ４となってハンドルを切ったという操作情報を受け取った時点から操作情報に基づいて車両の挙動を計算した場合、車両２２がＱＴ４からＱＴ８の経路を通るように車両の挙動を計算する。このように、サーバ１２とクライアント１１との間のネットワーク１３に遅延がある場合、サーバ１２には、クライアント１１からの操作情報が即座には伝わらない。このため、サーバ１２が受信した操作情報に基づいて車両の挙動を計算すると運転操作に対する車両の応答性が低下する。
【００７０】
また、サーバ１２とクライアント１１との間のネットワーク１３に遅延がある場合、サーバ１２からクライアント１１へ送信した情報も遅延するため、クライアント１１での操作に対する車両の追従性が悪くなる。このように、クライアント１１での操作に対する車両の追従性が悪い場合、車両の状態を参照して挙動計算を行う他の自動走行車両の計算にも遅延が生じ、正しい結果が得られなくなる場合がある。例えば、図２に示すように、道路上で操作対象の車両２１の前方に低速で走行する自動走行の車両２３が存在したとき、クライアント１１の利用者は、追い越しのため右にハンドルを切る操作を行ったものとする。この場合、右後方から接近する自動走行の車両２２は、車線変更しようとする操作対象の車両２１の挙動を見て、衝突を避けるためにブレーキを踏んで減速するなどの行動を取るべきである。しかし、車両２１の操作に対する追従性が悪いと、車両２２の挙動の応答性も悪くなり、正しい結果が得られない場合がある。
【００７１】
これに対し、本実施例に係るサーバ１２は、クライアント１１での車両に対する操作を予測し、予測した操作に基づいて車両の挙動をシミュレーションする。そして、本実施例に係るサーバ１２は、予測した操作を示す操作情報およびシミュレーションした結果を示すシミュレーション情報をシミュレーション結果データ７５に登録する。そして、本実施例に係るサーバ１２は、シミュレーション結果データ７５からシミュレーション結果を示すシミュレーション情報を順次クライアント１１へ送信する。また、本実施例に係るサーバ１２は、クライアント装置からオブジェクトに対する操作を受信する。そして、本実施例に係るサーバ１２は、受信した操作が予測した操作と所定以上異なる場合、受信した操作に基づいて操作を再予測し、再予測した操作に基づいてオブジェクトの状態を再シミュレーションし、シミュレーション結果データ７５を更新する。これにより、クライアント１１での車両の応答性の低下を抑えることができる。また、クライアント１１での操作入力に対する最新のオブジェクト状態をより正しく計算できる。また、サーバ１２でシミュレーションを行うため、クライアント１１の構成を複雑にすることなくシミュレーションを行うことができる。
【００７２】
［処理の流れ］
次に、本実施例に係るサーバ１２により仮想世界内の複数のオブジェクトの動きをシミュレーションするシミュレーション処理の流れを説明する。図１１は、実施例１に係るシミュレーション処理の手順を示すフローチャートである。このシミュレーション処理は、例えば、クライアント１１からシミュレーション開始を指示する指示情報が入力した場合に実行される。
【００７３】
図１１に示すように、受信部８５は、クライアント１１から仮想世界内を走行する車両に対する操作内容を示す操作情報を受信したか否か判定する（Ｓ１０）。操作情報を受信していない場合（Ｓ１０否定）、後述するステップＳ１２へ移行する。一方、操作情報を受信した場合（Ｓ１０肯定）、受信部８５は、受信した操作情報により示される受信した操作が、シミュレーション結果データ７５の当該受信した操作が行われた時刻の予測した操作と所定以上異なるか否か判定する（Ｓ１１）。
【００７４】
受信した操作が予測した操作と所定以上異ならない場合（Ｓ１１否定）、予測部８０は、現在時刻７０よりも予測遅延時間７１に記憶された遅延時間以上先としたシミュレーション対象時刻７２におけるクライアント１１での車両に対する操作を予測する（Ｓ１２）。シミュレーション部８１は、予測した操作に基づいて各時刻における仮想世界上の車両の挙動をシミュレーションする（Ｓ１３）。登録部８２は、予測した操作を示す操作情報、シミュレーションした結果の車両の位置、シミュレーションに用いた各種の状態変数などの情報をシミュレーション結果データ７５に登録する（Ｓ１４）。削除部８３は、現在時刻７０から予測遅延時間７１に記憶された遅延時間の２倍以上後となったシミュレーション対象時刻のデータをシミュレーション結果データ７５から削除する（Ｓ１５）。送信部８４は、シミュレーション結果を示すシミュレーション情報をクライアント１１へ送信する（Ｓ１６）。受信部８５は、クライアント１１からシミュレーション終了を指示する指示情報を受信したか否か判定する（Ｓ１７）。シミュレーション終了を指示する指示情報を受信した場合（Ｓ１７肯定）、処理を終了する。一方、シミュレーション終了を指示する指示情報を受信していない場合（Ｓ１７否定）、ステップＳ１０へ移行する。
【００７５】
一方、受信した操作が予測した操作と所定以上異なる場合（Ｓ１１肯定）、再予測部８６は、受信した操作に基づいて、当該受信した操作が行われた時刻以降の操作を再予測する（Ｓ１８）。再シミュレーション部８７は、再予測された操作が以前の操作と異なる場合、再予測した操作に基づいて受信した操作が行われた時刻以降のオブジェクトの状態を再シミュレーションする（Ｓ１９）。更新部８８は、シミュレーション結果データ７５の受信した操作が行われた時刻以降の予測した操作およびオブジェクトの状態を、再予測した操作および再シミュレーションしたオブジェクトの状態に更新し（Ｓ２０）、ステップＳ１２へ移行する。
【００７６】
次に、本実施例に係るクライアント１１によるシミュレーション結果の出力等を行う制御処理の流れを説明する。図１２は、実施例１に係る制御処理の手順を示すフローチャートである。この制御処理は、例えば、操作入力部３１からシミュレーション開始を指示する指示操作が入力された場合に実行される。
【００７７】
図１２に示すように、操作検出部５０は、操作入力部３１から入力する操作情報に基づき、仮想世界内を走行する車両に対する操作内容を検出し、操作情報を生成する（Ｓ３０）。送信部５１は、生成された操作情報を通信Ｉ／Ｆ部３２経由でサーバ１２へ送信する（Ｓ３１）。受信部５２は、サーバ１２からシミュレーション情報を受信したか否かを判定する（Ｓ３２）。シミュレーション情報を受信していない場合（Ｓ３２否定）、後述するステップＳ３４へ移行する。一方、シミュレーション情報を受信した場合（Ｓ３２肯定）、受信部５２は、受信したシミュレーション情報を出力用データ４１として記憶部３３に格納する（Ｓ３３）。出力制御部５３は、出力用データ４１から現在時刻４０に対応するシミュレーション対象時刻のシミュレーション情報を読み出す（Ｓ３４）。出力制御部５３は、読み出したシミュレーション情報に基づき、映像、走行音、振動などの出力を指示する各種信号を出力部３０へ出力する（Ｓ３５）。操作検出部５０は、操作入力部３１からシミュレーション終了を指示する指示操作を検出したか否か判定する（Ｓ３６）。シミュレーション終了を指示する指示操作を検出した場合（Ｓ３６肯定）、処理を終了する。一方、シミュレーション終了を指示する指示操作を検出していない場合（Ｓ３６否定）、ステップＳ３０へ移行する。
【００７８】
［実施例１の効果］
本実施例に係るサーバ１２は、ネットワーク１３を介して接続されたクライアント１１において仮想世界上のオブジェクトに対する操作が入力されるよりもネットワーク１３で想定される遅延時間以上前に各時刻におけるオブジェクトに対する操作を予測する。サーバ１２は、予測した操作に基づいて各時刻における仮想世界上のオブジェクトの状態をシミュレーションする。サーバ１２は、各時刻の予測した操作を示す操作情報およびシミュレーションした結果を示すシミュレーション情報をシミュレーション結果データ７５として記憶部６１に登録する。サーバ１２は、記憶部６１に記憶されたシミュレーション結果を示すシミュレーション情報を時刻順にクライアント１１へ送信する。サーバ１２は、クライアント１１からオブジェクトに対する操作を受信する。サーバ１２は、受信した操作が、記憶部６１に記憶された、当該受信した操作が行われた時刻の予測した操作と所定以上異なる場合、受信した操作に基づいて、記憶部６１に記憶された、当該受信した操作が行われた時刻以降の操作を再予測する。サーバ１２は、再予測した操作に基づいて前記受信した操作が行われた時刻以降のオブジェクトの状態を再シミュレーションする。サーバ１２は、記憶部６１に記憶された、当該受信した操作が行われた時刻以降の予測した操作およびオブジェクトの状態を、再予測した操作および再シミュレーションしたオブジェクトの状態に更新する。これにより、サーバ１２によれば、クライアント１１の構成を複雑にすることなくシミュレーションを行うことができる。このように、クライアント１１の構成が複雑にならず、クライアント１１の処理の負荷も低いため、例えば、スマートフォンやタブレット端末など、比較的処理能力の低い端末をクライアント端末とした場合でも、シミュレーションを実行することができる。また、サーバ１２によれば、クライアント１１での操作に対する応答性の低下を抑えることができる。また、サーバ１２によれば、クライアント１１での操作入力に対する最新のオブジェクト状態をより正しく計算できる。また、サーバ１２によれば、サーバ１２でシミュレーションを実行するため、複数のクライアント１１により複数のオブジェクトが操作される場合でも、各クライアント１１間での同一時刻における各オブジェクトの位置関係に食い違いが生じることを抑制できる。また、サーバ１２によれば、仮想世界内のオブジェクト挙動をサーバ上で集中的に計算することにより、オブジェクト間の相互作用を計算モデルに基づいて誤差なく計算することができる。
【実施例２】
【００７９】
次に、実施例２について説明する。実施例２に係るシミュレーションシステム１０、クライアント１１、サーバ１２の構成は、上述の実施例１とほぼ同様であるため、異なる部分について説明する。
【００８０】
ここで、仮想世界内の複数のオブジェクトの動きをシミュレーションする場合、オブジェクトが他のオブジェクトの影響を受ける場合がある。例えば、道路を走行する複数の車両の挙動をシミュレーションする場合、車間距離が短くなると衝突しないように速度を低下させる。このように、仮想世界内のオブジェクトは、他のオブジェクトの影響を受ける場合がある。
【００８１】
そこで、サーバ１２のシミュレーション部８１は、予測部８０により予測した操作に基づき、予め定めた影響を及ぼす条件を加えて各時刻における仮想世界上のオブジェクトの状態をシミュレーションする。例えば、シミュレーション部８１は、同じ車線の前方に他の車両がいる場合、車間距離が所定の許容値以下となると車間距離が短くなるほど車両の速度を低下させる。
【００８２】
登録部８２は、各オブジェクト毎に、シミュレーションで影響が及ぶオブジェクトをさらにシミュレーション結果データ７５に登録する。例えば、登録部８２は、各車両毎に、影響を受けた車両をシミュレーション結果データ７５に登録する。
【００８３】
図１３は、実施例２に係るシミュレーション結果データの構成例を示す図である。実施例２に係るシミュレーション結果データ７５の構成は、図６に示した実施例１に係るシミュレーション結果データと略同一であるため、異なる部分について説明する。図１３に示すように、シミュレーション結果データ７５は、自動走行車とされた車両２２、２３について、「影響を受けたオブジェクト」の項目がさらに設けられている。影響を受けたオブジェクトの項目は、シミュレーションの際に影響を受けた車両を示す情報を格納する領域である。図１３の例は、時刻Ｔ０において、車両２２は、車両２１の影響を受けたことを示す。また、時刻Ｔ０において、車両２３は、影響を受けた車両がないことを示す。
【００８４】
再シミュレーション部８７は、再予測された操作が以前の操作と異なる場合、再予測した操作に基づいて受信した操作が行われた時刻以降のオブジェクトの状態を再シミュレーションする。また、再シミュレーション部８７は、再シミュレーションされたオブジェクトから影響が及ぶオブジェクトの状態を再シミュレーションする。例えば、再シミュレーション部８７は、シミュレーション結果データ７５において影響を受けたオブジェクトの項目に登録された車両が１ステップ前のシミュレーション対象時刻で再シミュレーションされた場合、車両の挙動を再シミュレーションする。
【００８５】
図１４は、実施例２に係るシミュレーション結果データの構成例を示す図である。なお、図１４は、図７に示した流れのシミュレーションが行われた場合の状態を示している。
【００８６】
図１４の例では、クライアント１１から受信した時刻Ｔ１の操作情報の操作がシミュレーション対象時刻Ｔ１の予測した操作と所定以上異なるため、時刻Ｔ１の操作が、実際の操作ｕ１’Ｔ１、・・・、ｕｎ’Ｔ１に更新されている。このため、車両２１は、時刻Ｔ２〜Ｔ３について、車両の挙動が再シミュレーションされる。また、図１４の例では、時刻Ｔ１〜Ｔ３について、車両２２は車両２１からの影響を受けており、車両２３は車両２１からの影響を受けていない。そして、図１４の例では、車両２２は、時刻Ｔ３の１ステップ前の時刻Ｔ２で車両２１が再シミュレーションされている。このため、車両２２は、時刻Ｔ３について、位置座標、その他状態変数の項目が再計算の対象となり、１ステップ前の更新された値に基づいて操作およびオブジェクトの状態が再計算されて更新される。一方、車両２３は、位置座標、その他状態変数の項目が再計算の対象とならない。なお、実際に再計算される部分は、前時刻での更新前後の差分が既定の閾値以上の部分および差分が既定の閾値以上の部分を参照して計算される部分のみであり、それ以外の部分は再計算されない。
【００８７】
図１５は、実施例２に係るシミュレーション処理の手順を示すフローチャートである。なお、図１１に示す実施例１に係るシミュレーション処理と同一の処理部分については同一の符号を付して説明を省略し、異なる処理部分について説明する。
【００８８】
シミュレーション部８１は、予測した操作に基づき、予め定めた影響を及ぼす条件を加えて各時刻における仮想世界上の車両の挙動をシミュレーションする（Ｓ１３ａ）。登録部８２は、予測した操作を示す操作情報、シミュレーションした結果の車両の位置、シミュレーションで影響を受けたオブジェクト、シミュレーションに用いた各種の状態変数などの情報をシミュレーション結果データ７５に登録する（Ｓ１４ａ）。再シミュレーション部８７は、次のような再シミュレーションを行う（Ｓ１９ａ）。すなわち、再シミュレーション部８７は、再予測された操作が以前の操作と異なる場合、再予測した操作に基づいて受信した操作が行われた時刻以降のオブジェクトの状態を再シミュレーションする。また、再シミュレーション部８７は、再シミュレーションされたオブジェクトから影響が及ぶオブジェクトの状態を再シミュレーションする。
【００８９】
［実施例２の効果］
本実施例に係るサーバ１２は、各オブジェクト毎に、シミュレーションで影響が及ぶオブジェクトを記憶部６１にさらに登録する。サーバ１２は、操作が再予測されたオブジェクトの状態、および記憶部６１に記憶された、当該操作が再予測されたオブジェクトの影響が及ぶオブジェクトの状態を再シミュレーションする。これにより、サーバ１２によれば、再計算の対象となるデータが減少するため、再シミュレーションの処理負荷を軽減できる。
【実施例３】
【００９０】
次に、実施例３について説明する。実施例３に係るシミュレーションシステム１０、クライアント１１、サーバ１２の構成は、上述の実施例１とほぼ同様であるため、異なる部分について説明する。
【００９１】
サーバ１２の送信部８４は、シミュレーション結果を示すシミュレーション情報と共に予測した操作を示す操作情報を時刻順にクライアント１１へ送信する。例えば、送信部８４は、シミュレーション結果データ７５からシミュレーション対象時刻が現在時刻７０から予測遅延時間７１に記憶された遅延時間分前の時刻の各車両の位置座標および当該時刻の予測した操作を示す操作情報をクライアント１１へ送信する。
【００９２】
図１６は、実施例３に係るクライアントの機能的構成を示すブロック図である。なお、クライアント１１の構成は、図４に示す実施例１に係るクライアント１１とほぼ同様であるため、異なる部分について説明する。図１６に示すように、制御部３４は、補正部５４をさらに有する。
【００９３】
受信部５２は、受信したシミュレーション情報および予測した操作を示す操作情報を出力用データ４１として記憶部３３に格納する。
【００９４】
補正部５４は、記憶部３３に記憶された現在時刻４０を参照し、出力用データ４１から現在時刻４０に対応するシミュレーション対象時刻のシミュレーション情報および操作情報を読み出す。補正部５４は、読み出した操作情報により示される予測した操作を、操作検出部５０により検出される操作入力部３１から入力する実際の操作と比較する。補正部５４は、予測した操作が実際の操作と所定以上異なる場合、当該予測した操作と当該実際の操作の差に基づいて、読み出したシミュレーション情報を補正する。例えば、補正部５４は、予測した操作と実際の操作のハンドルの操作量やアクセルの操作量、ブレーキの操作量が所定以上異なる場合、操作量の差に基づいて車両の位置を補正する。
【００９５】
出力制御部５３は、補正部５４により補正されたシミュレーション情報に基づき、映像、走行音、振動などの出力を指示する各種信号を出力部３０へ出力する。これにより、出力部３０は、制御部３４から入力する各種信号に基づいて、利用者が仮想世界を体験するための映像や音響、振動などを出力する。
【００９６】
次に、本実施例に係るシミュレーションシステム１０により求まる車両の挙動の一例を説明する。図１７は、シミュレーションシステムにより求めた車両の移動経路の一例を示す図である。図１７の例では、時刻Ｔ０まではハンドルが直進状態であり、時刻Ｔ１において、ハンドルを左に切る操作が行われたものとする。図１７の例では、ハンドルを左に切る操作により時刻Ｔ０〜Ｔ８において車両２２が通過すべき本来の位置をＲＴ０、ＲＴ１・・・ＲＴ８により示している。また、図１７の例では、ハンドルを左に切る操作により車両２２が通過すべき本来の経路を一点鎖線により示している。また、図１７の例では、時刻Ｔ０〜Ｔ８においてサーバ１２からクライアント１１に通知される車両２２の位置をＰＴ０、ＰＴ１・・・ＰＴ８により示している。また、図１７の例では、クライアント１１で補正された車両２２の位置をＷＴ２、ＷＴ３により示している。
【００９７】
サーバ１２は、時刻Ｔ３まで、時刻Ｔ０の操作入力に基づく計算により、車両２２がＰＴ０からＰＴ３の経路を通るように車両の挙動を計算する。このため、サーバ１２からクライアント１１に通知される時刻Ｔ２、Ｔ３の車両２２の位置をＰＴ１、ＰＴ２は、車両２２が通過すべき本来の位置ＲＴ１、ＲＴ２からずれている。この時刻Ｔ１〜Ｔ３の間、サーバ１２は、ハンドルが直進状態であると予測し、予測した操作の操作情報をクライアント１１へ送信する。
【００９８】
一方、クライアント１１は、受信した操作情報により示される予測した操作を操作入力部３１から入力する実際の操作と比較する。そして、クライアント１１は、予測した操作が実際の操作と所定以上異なる場合、当該予測した操作と当該実際の操作の差に基づいて、シミュレーション情報を補正する。これにより、時刻Ｔ２およびＴ３における車両２２の位置は、ＷＴ２、ＷＴ３に修正される。すなわち、クライアント１１において補正を行うことにより、時刻Ｔ２およびＴ３についても車両２２の位置を、本来の位置ＲＴ１、ＲＴ２に近づけることができる。
【００９９】
図１８は、実施例３に係る制御処理の手順を示すフローチャートである。なお、図１２に示す実施例１に係るシミュレーション処理と同一の処理部分については同一の符号を付して説明を省略し、異なる処理部分について説明する。
【０１００】
図１８に示すように、補正部５４は、出力用データ４１から現在時刻４０に対応するシミュレーション対象時刻のシミュレーション情報を読み出す（Ｓ３４ｂ）。補正部５４は、読み出した操作情報により示される予測した操作が実際の操作と所定以上異なるか否か判定する（Ｓ３５ｂ）。予測した操作が実際の操作と所定以上異なる場合（Ｓ３５ｂ肯定）、補正部５４は、予測した操作と当該実際の操作の差に基づいて、読み出したシミュレーション情報を補正する（Ｓ３６ｂ）。一方、予測した操作が実際の操作と所定以上異ならない場合（Ｓ３５ｂ否定）、後述するステップＳ３７ｂへ移行する。出力制御部５３は、シミュレーション情報に基づき、映像、走行音、振動などの出力を指示する各種信号を出力部３０へ出力する（Ｓ３７ｂ）。操作検出部５０は、操作入力部３１からシミュレーション終了を指示する指示操作を検出したか否か判定する（Ｓ３８ｂ）。シミュレーション終了を指示する指示操作を検出した場合（Ｓ３８ｂ肯定）、処理を終了する。一方、シミュレーション終了を指示する指示操作を検出していない場合（Ｓ３８ｂ否定）、ステップＳ３０へ移行する。
【０１０１】
［実施例３の効果］
本実施例に係るサーバ１２は、シミュレーション情報と共に予測した操作の操作情報をさらにクライアント１１へ送信する。本実施例に係るクライアント１１は、送信された前記シミュレーション情報および操作情報を受信する。クライアント１１は、受信した操作情報により示される予測した操作がオブジェクトに対する実際の操作と所定以上異なる場合、当該予測した操作と当該実際の操作の差に基づいて、受信したシミュレーション情報を補正する。クライアント１１は、補正したシミュレーション情報に基づいて仮想世界を表示する。これにより、クライアント１１によれば、操作に対する高い表示レスポンスを確保できる。
【実施例４】
【０１０２】
さて、これまで開示の装置に関する実施例について説明したが、本発明は上述した実施例以外にも、種々の異なる形態にて実施されてよいものである。そこで、以下では、本発明に含まれる他の実施例を説明する。
【０１０３】
例えば、上記の実施例では、仮想世界を道路空間とし、オブジェクトを車両とした場合について説明したが、開示の装置はこれに限定されない。仮想世界およびオブジェクトはどのようなものであってもよい。例えば、オブジェクトは他の種類の乗り物やロボット、あるいは人や動物などのキャラクターであってもよい。
【０１０４】
また、上記の実施例２では、シミュレーションで影響が及ぶオブジェクトとして、各車両毎に、影響を受けた車両を記憶する場合について説明したが、開示の装置はこれに限定されない。例えば、各車両毎に、影響を与えた車両を記憶してもよい。
【０１０５】
［分散および統合］
また、図示した各装置の各構成要素は、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。例えば、サーバ１２の予測部８０、シミュレーション部８１、登録部８２、削除部８３、送信部８４、受信部８５、再予測部８６、再シミュレーション部８７、更新部８８の各処理部が適宜統合されてもよい。また、クライアント１１の操作検出部５０、送信部５１、受信部５２、出力制御部５３、補正部５４の各処理部が適宜統合されてもよい。また、サーバ１２およびクライアント１１の各処理部の処理が適宜複数の処理部の処理に分離されてもよい。また、サーバ１２およびクライアント１１の各処理部を別の装置がそれぞれ有し、ネットワーク接続されて協働することで、上記のサーバ１２の機能を実現するようにしてもよい。
【符号の説明】
【０１０６】
１０    シミュレーションシステム
１１    クライアント
１２    サーバ
１３    ネットワーク
２１    車両
６１    記憶部
６２    制御部
７２    シミュレーション対象時刻
７５    シミュレーション結果データ
８０    予測部
８１    シミュレーション部
８２    登録部
８４    送信部
８５    受信部
８６    再予測部
８７    再シミュレーション部
８８    更新部
【図１】
0005821745.tif 000002
【図２】
0005821745.tif 000003
【図３】
0005821745.tif 000004
【図４】
0005821745.tif 000005
【図５】
0005821745.tif 000006
【図６】
0005821745.tif 000007
【図７】
0005821745.tif 000008
【図８】
0005821745.tif 000009
【図９】
0005821745.tif 000010
【図１０】
0005821745.tif 000011
【図１１】
0005821745.tif 000012
【図１２】
0005821745.tif 000013
【図１３】
0005821745.tif 000014
【図１４】
0005821745.tif 000015
【図１５】
0005821745.tif 000016
【図１６】
0005821745.tif 000017
【図１７】
0005821745.tif 000018
【図１８】
0005821745.tif 000019