(57)【特許請求の範囲】
【請求項１】
入力デバイスのタッチパネルディスプレイに表示され、ターゲットデバイスを操作するための操作入力を受け付けるＧＵＩコントローラの設計を支援するＧＵＩコントローラ設計支援装置であって、
複数のコントローラパーツを含んで構成され前記ＧＵＩコントローラを定義するコントローラセットを編集するためのコントローラセット編集手段と、
前記コントローラセットに含まれる各コントローラパーツを編集するためのコントローラパーツ編集手段と、
前記コントローラパーツに対する操作入力に応じた前記ターゲットデバイスの制御を規定するユーザプログラムを編集するためのユーザプログラム編集手段と、
を備えるＧＵＩコントローラ設計支援装置。
【請求項２】
前記ターゲットデバイスを制御するために前記ユーザプログラムから呼び出して利用するオブジェクトであるドライバが動作するエンジンが前記ユーザプログラムを実行するための実行環境を起動している状態において、前記コントローラセット編集手段、および、コントローラパーツ編集手段にて編集された前記コントローラセットを、前記入力デバイスに登録するＧＵＩコントローラ登録手段をさらに備える、請求項１に記載のＧＵＩコントローラ設計支援装置。
【請求項３】
前記ターゲットデバイスを制御するために前記ユーザプログラムから呼び出して利用するオブジェクトであるドライバが動作するエンジンが前記ユーザプログラムを実行するための実行環境を起動している状態において、前記ユーザプログラム編集手段にて編集された前記ユーザプログラムを、前記エンジンに登録するユーザプログラム登録手段をさらに備える、請求項１または２に記載のＧＵＩコントローラ設計支援装置。
【請求項４】
請求項１から３のいずれか１項に記載のＧＵＩコントローラ設計支援装置と、
タッチパネルディスプレイを備え、当該タッチパネルディスプレイにＧＵＩコントローラを表示する入力デバイスと、
前記ターゲットデバイスを制御するために前記ユーザプログラムから呼び出して利用するオブジェクトであるドライバが動作するエンジンと、
を備えるリモートコントロールシステムであって、
前記入力デバイスは、前記タッチパネルディスプレイに表示されたＧＵＩコントローラに対するユーザの操作入力を受け付け、当該操作入力の内容を前記エンジンに送信し、
前記エンジンは、前記入力デバイスから受け取った操作入力の内容に基づき、前記ターゲットデバイスを制御すべくドライバを動作させ、
前記入力デバイスは、前記エンジンが前記ユーザプログラムを実行するための実行環境を起動している状態において、前記ユーザプログラムと関連付けられた前記ＧＵＩコントローラのコントローラセットを更新可能とし、
前記エンジンは、前記ユーザプログラムを実行するための実行環境を起動している状態において、前記ユーザプログラムを更新可能とすることを特徴とするリモートコントロールシステム。
【請求項５】
コンピュータを、請求項１から３のいずれか１項に記載のＧＵＩコントローラ設計支援装置として機能させるプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、ＧＵＩ（Graphical User Interface）により実現されるコントローラの設計やプログラミングを支援するＧＵＩコントローラ設計支援装置に関する。
【背景技術】
【０００２】
従来から、ラジオコントロール（ＲＣ）カー、ドローン、ロボット、ゲームなどを無線通信により遠隔操作するためのコントローラ装置をスマートフォンなどの画面に表示される操作ボタン等によるＧＵＩとして提供することが実現されている（例えば、特許文献１を参照）。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】特開２０１９−８５０４１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００４】
このようなＧＵＩによるコントローラ装置では、操作対象の装置を起動した後は信号を受け付けてからの制御が固定されているか、単純な変更（例えば、ある操作パラメータに対する極性やゲインの変更等）しかできないように構成されている。このため、新たな挙動を追加したり、パラメータそのものを動的に追加したりすることはできず、プログラミングによる自動操縦などの複雑な制御を実現するには、所望の制御に成功するまでに繰り返す試行錯誤の都度、捜査対象の装置を再起動することが必要であるため、非常に多くの時間要していた。【０００５】
本発明の課題は、上記の問題を解決し、柔軟かつリアルタイムに制御やグラフィック表現を変更可能なコントローラ装置のプログラミングを支援するＧＵＩコントローラ設計支援装置を提供することにある。
【課題を解決するための手段】
【０００６】
上記の課題を解決すべく、本発明に係るＧＵＩコントローラ設計支援装置は、入力デバイスのタッチパネルディスプレイに表示され、ターゲットデバイスを操作するための操作入力を受け付けるＧＵＩコントローラの設計を支援する。ＧＵＩコントローラ設計支援装置は、複数のコントローラパーツを含んで構成されＧＵＩコントローラを定義するコントローラセットを編集するためのコントローラセット編集手段と、コントローラセットに含まれる各コントローラパーツを編集するためのコントローラパーツ編集手段と、コントローラパーツに対する操作入力に応じたターゲットデバイスの制御を規定するユーザプログラムを編集するためのユーザプログラム編集手段と、を備える。【０００７】
本発明では、ＧＵＩコントローラ設計支援装置は、ターゲットデバイスを制御するためにユーザプログラムから呼び出して利用するオブジェクトであるドライバが動作するエンジンがユーザプログラムを実行するための実行環境を起動している状態において、ＧＵＩコントローラ編集手段にて編集されたコントローラセットを、入力デバイスに登録するＧＵＩコントローラ登録手段をさらに備えるとよい。【０００８】
また、ＧＵＩコントローラ設計支援装置は、ターゲットデバイスを制御するためにユーザプログラムから呼び出して利用するオブジェクトであるドライバが動作するエンジンがユーザプログラムを実行するための実行環境を起動している状態において、ユーザプログラム編集手段にて編集されたユーザプログラムを、エンジンに登録するユーザプログラム登録手段をさらに備えるとよい。【０００９】
また、上記の課題を解決すべく、本発明に係るリモートコントロールシステムは、上記いずれかのＧＵＩコントローラ設計支援装置と、タッチパネルディスプレイを備え、当該タッチパネルディスプレイにＧＵＩコントローラを表示する入力デバイスと、ターゲットデバイスを制御するためにユーザプログラムから呼び出して利用するオブジェクトであるドライバが動作するエンジンと、を備える。このリモートコントロールシステムにおいて、入力デバイスは、タッチパネルディスプレイに表示されたＧＵＩコントローラに対するユーザの操作入力を受け付け、当該操作入力の内容をエンジンに送信し、エンジンは、入力デバイスから受け取った操作入力の内容に基づき、ターゲットデバイスを制御すべくドライバを動作させる。入力デバイスは、エンジンがユーザプログラムを実行するための実行環境を起動している状態において、ユーザプログラムと関連付けられたＧＵＩコントローラのコントローラセットを更新可能とする。また、エンジンは、ユーザプログラムを実行するための実行環境を起動している状態において、ユーザプログラムを更新可能とする。【００１０】
また、上記の課題を解決すべく、本発明に係るプログラムは、コンピュータを、上記いずれかのＧＵＩコントローラ設計支援装置として機能させる。
【図面の簡単な説明】
【００１１】
【図１】ＧＵＩコントローラ設計支援装置１が適用される、リモートコントロール環境の一例を示している。
【図２】入力デバイス２に登録されたＧＵＩコントローラにより、エンジン３を介してターゲットデバイス４を制御する際の手順を示すフローチャートである。
【図３】既存のＧＵＩコントローラやユーザプログラムを編集し更新する際の処理の手順を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下、本発明の実施形態を図面に基づいて説明する。なお、以下の説明では、同一の部材には同一の符号を付し、一度説明した部材については適宜その説明を省略する。
【００１３】
〔リモートコントロール環境の構成〕
図１は、本実施形態に係るＧＵＩコントローラ設計支援装置１が適用される、リモートコントロール環境の一例を示している。すなわち、このリモートコントロール環境では、入力デバイス２に対するユーザの操作入力に応じて、エンジン３を介して操作対象であるターゲットデバイス４に制御信号が送信され、ターゲットデバイス４の制御が実現される。ＧＵＩコントローラ設計支援装置１は、入力デバイス２に表示される操作画面の設計、入力デバイス２への操作入力に応じてエンジン３で実行されるプログラムの編集等を行い、これらを適宜更新するための環境を提供する。ＧＵＩコントローラ設計支援装置１、入力デバイス２及びエンジン３は、ネットワークＮＷを介して通信可能とされる。なお、ＧＵＩコントローラ設計支援装置１、入力デバイス２、エンジン３の全て又は一部は共通のハードウェアにより実現されてもよい。また、エンジン３とターゲットデバイス４は、無線通信手段（ネットワークＮＷを介するか否かは任意）にて通信可能とされる。
【００１４】
ＧＵＩコントローラ設計支援装置１は、ＧＵＩコントローラ、ユーザプログラムの編集、ユーザプログラムが実行されるエンジン３上の環境である実行環境の編集、ターゲットデバイス４を制御するためにユーザプログラムから呼び出して利用するオブジェクトであるドライバの編集等を行う機能をユーザに提供する装置であり、コンピュータ等により実現される。ＧＵＩコントローラ設計支援装置１は、制御部１０、記憶部１１、表示部１２、入力部１３、及び通信部１４を備える。
【００１５】
制御部１０は、記憶部１１に記憶されている各種のプログラムを実行することにより、ＧＵＩコントローラ設計支援装置１の機能を実現する。具体的には、制御部１０は、後述するＧＵＩコントローラ編集機能、ユーザプログラム編集機能等の諸機能を実現する。制御部１０は、例えばＣＰＵ等により実現される。
【００１６】
記憶部１１は、制御部１０にて実行するプログラムや、当該プログラムで用いられるデータ等を記憶する。すなわち、記憶部１１は、ＧＵＩコントローラ編集機能及びユーザプログラム編集機能を実現するためのプログラム及びデータを記憶する。例えば、記憶部１１は、ＧＵＩコントローラ編集機能にてユーザが利用可能なコントローラパーツのテンプレート等を記憶するとよい。
【００１７】
表示部１２は、液晶ディスプレイ、有機ＥＬディスプレイ等の表示素子であり、制御部１０による制御の下、各種の情報を表示する。入力部１３は、ユーザによる操作を受け付ける。入力部１３は、例えば、キーボード、マウス、表示部１２に重ねて設けられるタッチパネル等とするとよい。通信部１４は、ネットワークＮＷやその他の通信回線を介して、入力デバイス２、エンジン３等との通信を行う。
【００１８】
入力デバイス２は、ＧＵＩコントローラ設計支援装置１で作成・編集したＧＵＩコントローラの画面を表示し、当該ＧＵＩコントローラに対する操作入力を受け付けて、受け付けた操作入力の内容をエンジン３に送信する。入力デバイス２は、制御部２０、記憶部２１、表示部２２、入力部２３、及び通信部２４を備える。
【００１９】
制御部２０は、記憶部２１に記憶されている各種のプログラムを実行することにより、入力デバイス２の機能を実現する。具体的には、制御部２０は、ＧＵＩコントローラの画面を入力部２３に表示させる機能、ＧＵＩコントローラを構成する各コントローラパーツに対するユーザの操作入力を受け付け、受け付けた操作入力の内容を通信部２４を介してエンジン３に送信する機能等を実現する。制御部２０は例えばＣＰＵ等により実現される。
【００２０】
記憶部２１は、制御部２０にて実行するプログラムや、当該プログラムで用いられるデータ等を記憶する。具体的には、記憶部２１は、ＧＵＩコントローラを定義するコントローラセットＣＬ、コントローラセットＣＬに従ってＧＵＩコントローラの画面を表示部２２に表示させるための描画プログラム等を記憶する。また、記憶部２１は、ＧＵＩコントローラを構成する各コントローラパーツについて、入力可能な座標範囲を規定したインデックスを記憶する。
【００２１】
表示部２２は、液晶ディスプレイ、有機ＥＬディスプレイ等の表示素子であり、制御部２０による制御の下、ＧＵＩコントローラの画面等の各種の情報を表示する。
【００２２】
入力部２３は、ユーザによる操作入力を受け付ける。入力部２３は、例えば、キーボード、マウス、表示部２２に重ねて設けられるタッチパネル等とするとよい。表示部２２にＧＵＩコントローラが表示された状態で、ユーザが表示部２２に重ねて設けられたタッチパネルを操作すると、タッチパネルがタッチされた座標を検出し、検出した座標がインデックスに照会され、検出した座標に対応するコントローラパーツへの操作入力として受け付けられることになる。また、入力部２３として、加速度センサを設け、入力デバイス２の姿勢変化（傾き）をユーザの操作入力として検知するようにしてもよい。入力部２３としれ上記に以外の入力デバイスやセンサ類を設けてもよい。通信部２４は、ネットワークＮＷやその他の通信回線を介して、ＧＵＩコントローラ設計支援装置１、エンジン３等との通信を行う。通信部２４は、例えば、各コントローラパーツに対する操作入力の内容をエンジン３に送信する。
【００２３】
エンジン３は、制御部３０、記憶部３１、及び通信部３４を備える。
制御部３０は、記憶部３１に記憶されている各種のプログラムを実行することにより、エンジン３の機能を実現する。制御部３０は例えばＣＰＵ、マイコン（マイクロコンピュータ）等により実現される。
【００２４】
記憶部３１は、制御部３０にて実行するプログラムや、当該プログラムで用いられるデータ等を記憶する。具体的には、記憶部３１は、実行環境を実現するためのプログラム、ターゲットデバイス４に対応したドライバ、及びこれらのプログラムで用いられるデータ等を記憶する。
【００２５】
実行環境は、ユーザのプログラムを実行するためのランタイム（Runtime）である。実行環境は、ターゲットデバイス４に対する操作入力等に起因する実行要求を受け付け、当該実行要求に対応するユーザプログラムの関数や起動ブロックを順次処理する。実行環境は、各種のプログラミング言語に対応可能なように複数種類用意されてよい。
【００２６】
ドライバは、通信部３４を介してやり取りされるターゲットデバイス４の入出力と、実行環境との間を取り持つプログラムである。ドライバは、例えば、実行環境で実行されるユーザプログラムに基づき、当該制御命令に応じてターゲットデバイス４にて処理可能な制御信号を出力したり、ターゲットデバイス４から送られるセンサ出力等の情報を実行環境で実行されているユーザプログラムに提供したりする機能を実現する。
【００２７】
通信部３４は、ネットワークＮＷやその他の通信回線を介して、ＧＵＩコントローラ設計支援装置１、入力デバイス２、ターゲットデバイス４等との通信を行う。具体的には、エンジン３は、通信部３４を介し、ＧＵＩコントローラ設計支援装置１からのユーザプログラムの受信、入力デバイス２からの操作入力の内容の受信、ターゲットデバイス４への制御信号の送信、ターゲットデバイス４からのセンサ出力の受信等を行う。
【００２８】
ターゲットデバイス４は、ＧＵＩコントローラによる操作の対象となるデバイスである。ターゲットデバイス４は、例えば、ドローン、ラジコンカー、ロボット等の物理デバイスや、３Ｄモデル等の仮想空間で動作するデバイスとするとよい。ターゲットデバイス４は、制御部４０、記憶部４１、駆動部４２、センサ部４３及び通信部４４を備える。
【００２９】
制御部４０は、制御部４０に記憶されているファームウェア等のプログラムを実行することによりターゲットデバイス４の制御を司る。制御部４０は例えば、マイコン、ＣＰＵ等により実現される。
【００３０】
記憶部４１は、エンジン３にて動作するドライバからの送信信号に応じて動作するプログラム（いわゆるファームウェア）を記憶する。駆動部４２は、ターゲットデバイス４の動作を実現する部材であり、例えば、モータ、アクチュエータ、及びこれらのドライバ等により構成される。センサ部４３は、ターゲットデバイス４の周囲から種々の情報を取得するセンサ類により構成される。センサ部４３は、例えば、カメラ、加速度センサ、ＧＰＳ受信装置、測距センサ、赤外線センサ等を備えるとよい。
【００３１】
通信部４４は、ネットワークＮＷやその他の通信回線を介して、エンジン３との通信を行う。すなわち、ターゲットデバイス４は、通信部４４を介してエンジン３から制御信号を受信し、必要に応じてセンサ部４３で取得した情報をエンジン３に送信する。
【００３２】
〔コントローラセット〕
続いて、ＧＵＩコントローラを定義するコントローラセットＣＬについて説明する。
コントローラセットＣＬは、コントローラパーツのインスタンスの集合（リスト）、ユーザが作成した操作に応じた処理を定義するプログラム（ユーザプログラム）を含んでいる。
【００３３】
コントローラセットＣＬを構成する各コントローラパーツは、後述のコントローラパーツ編集機能を用いてユーザにより配置や外観が定義される。ＧＵＩコントローラは、コントローラセットＣＬに含まれる複数のコントローラパーツを組み合わせてその外観が定義されることになる。ユーザプログラムは定義済みのコントローラパーツを利用し、任意のプログラムを実装したものである。
【００３４】
コントローラセットＣＬは静的属性として、ＧＵＩコントローラをグローバルで一意に特定するための識別情報であるＵＵＩＤ（Universally Unique Identifier）、コントローラ付与された名称であるコントローラ名称、コントローラの変更履歴を管理するための変更履歴番号、コントローラが対象とするデバイスを示すドライバタイプ、当該コントローラセットにより定義されるＧＵＩコントローラを表示する際の入力デバイス２の向き（縦／横）を示すデバイスオリエンテーション、ＧＵＩコントローラの各パーツや背景を表現（描画）するための画像を示すスキン情報、コントローラセットＣＬに含まれるユーザプログラムを実行する実行環境の選択設定等を含んでいる。
【００３５】
コントローラパーツは、ＧＵＩコントローラに配置して利用できる部品であり、ユーザによる操作入力に応じて様々な制御パターンを実現する。１つのコントローラセットにコントローラパーツとして複数のインスタンスを追加することが許容され、個々のコントローラパーツにはユニークな識別情報が付与される。ユーザプログラムでは、この識別情報で各コントローラパーツのインスタンスを識別して利用することができる。
【００３６】
コントローラパーツにはさまざまなタイプが存在する。コントローラパーツは、それぞれのタイプごとに特有の属性や状態、振る舞いを持っており、無制限にインスタンス化し、インスタンス毎に識別してユーザプログラム上から利用することが可能とされる。
【００３７】
各コントローラパーツは、共通属性として、コントローラ内で一意の名称であるパーツ名称を含んでいる。コントローラパーツのタイプとしては、ジョイスティック、十字キー、ボタン、スイッチ、スライダ、ダイヤル、ジェスチャ、文字列出力エリア、動画/画像出力エリア等が準備されている。これらのコントローラパーツの各タイプについて、設定可能な定義属性（静的属性）や状態属性（入力状態）が保持される。
【００３８】
定義属性は、予め定義された変化しない属性である。状態属性は、プログラムの実行状態や、ユーザのコントローラ操作状態に応じて変化する属性である。例えば、ジョイスティックについては、定義属性として、表示サイズ、最小値、最大値、表示位置、アクティブ状態での表示色、枠外判定精度、軌道判定タッチ回数、ユーザプログラムに操作入力を通知する頻度を示すプログラム通知頻度等が定義される。各コントローラパーツは、オーバーレイ設定可能なパーツ以外、表示上重ならないようその表示位置が定義される。また、状態属性としては、アクティブフラグ、開始座標情報、移動前座標情報、移動後座標情報等がプログラムの実行状態や、ユーザのコントローラ操作状態に応じて記録・保持される。
【００３９】
続いて、ＧＵＩコントローラ設計支援装置１により提供される、コントローラセット編集機能、実行環境編集機能、ドライバ編集機能、コントローラパーツ編集機能、及びユーザプログラム編集機能について説明する。
【００４０】
〔実行環境編集機能〕
実行環境編集機能は、制御部１０が実行するプログラムとして実現される。実行環境編集機能は、ユーザプログラムが実行されるエンジン３上の環境である実行環境について、そのインスタンスを生成し、当該生成したインスタンスに対して様々な設定項目についての設定値の入力をする画面を提供する。この画面を介したユーザの入力により、設定値を変更することができる。エンジン３では、複数の種類の実行環境（例えば扱うスクリプト言語が異なるもの）を同時に利用することが可能とされ、実行環境編集機能では、利用可能な実行環境のいずれかを選択してその設定を編集することができる。
【００４１】
〔ドライバ編集機能〕
ドライバ編集機能は、制御部１０が実行するプログラムとして実現される。ドライバは、ターゲットデバイス４を制御するためにユーザプログラムから呼び出して利用するオブジェクトである。ドライバ編集機能は、ターゲットデバイス４を制御するドライバをユーザに選択させる画面を提供する。この画面にて、ユーザが所望のドライバを選択すると、エンジン３において選択したドライバのインスタンスが生成され、生成されたインスタンスに対し識別情報を付与する処理が実行される。ユーザプログラムは、この識別情報を指定して、所望のドライバを介したターゲットデバイス４の制御を実現する。ドライバ編集機能は、生成済みのドライバのインスタンスに対する設定項目を入力する画面を提供する。この画面を介したユーザの入力により、設定値を変更することができる。
【００４２】
〔コントローラセット編集機能〕
コントローラセット編集機能は、制御部１０が実行するプログラムとして実現される。コントローラセット編集機能は、表示部１２に表示されるメニューにおいて、ユーザがＧＵＩコントローラの編集を選択することで開始される。コントローラセット編集機能では、新規にコントローラセットを作成することも、既存のコントローラセットを編集することも可能とされる。新規にコントローラセットを作成する場合には、ユーザはその旨のメニューを選択する。また、既存のコントローラセットを編集する場合には、ユーザは記憶部１１に記憶された既存のコントローラセットを選択する。新規作成、または、既存のＧＵＩコントローラセットが選択されると、対応するコントローラセットのインスタンスが生成される。そして、そのコントローラセットに対応する実行環境を起動し、起動した実行環境に当該コントローラセットに含まれるユーザプログラムを登録する。また、コントローラセットのインスタンスへの参照が入力デバイス２に渡されるようにするとよい。
【００４３】
〔コントローラパーツ編集機能〕
コントローラパーツ編集機能は、コントローラセットを構成する各コントローラパーツについて、様々な属性を編集する機能である。コントローラパーツ編集機能は、コントローラセット編集機能が実行された後に、表示部１２に表示されるメニューにおいて、ユーザがコントローラパーツの編集を選択することで開始される。
【００４４】
コントローラパーツ編集機能が開始されると、表示部１２には、編集領域Ｒ１が表示される。編集領域Ｒ１は、入力デバイス２の画面に表示するコントローラパーツの配置、外観等を視覚的に確認しながら編集するための表示領域である。新規にＧＵＩコントローラを作成する場合には、起動時の編集領域Ｒ１は空白の状態とされる。一方、既存のＧＵＩコントローラを編集する場合には、編集領域Ｒ１には、起動時に選択されたコントローラセットに基づき保存済みのＧＵＩコントローラが表示された状態とされる。
【００４５】
ユーザは、編集領域Ｒ１内に所望のコントローラパーツを配置したり、配置済みのコントローラパーツを移動、削除、編集（各種属性値の変更）等を行ったりすることにより、自由にＧＵＩコントローラを作成・編集することができる。編集領域Ｒ１に配置することができるコントローラパーツのひな形は記憶部１１に予め記憶されている。そして、これらのひな形は、ユーザインタフェースを介してユーザが適宜選択して任意の位置に配置することができるように構成される。また、配置済みのコントローラパーツについては、タッチパネルに対するタップやマウスカーソルを合わせた状態でのクリックによって選択が可能とされ、いわゆるドラッグ操作により移動が可能とされる。また、配置済みのコントローラパーツに対しダブルクリック又はダブルタップをすると、当該コントローラパーツについての定義属性を編集することが可能とされる。
【００４６】
変更内容を保存する操作や自動保存機能により、コントローラパーツの編集が確定されると、編集後のＧＵＩコントローラに対応するコントローラパーツが記憶部１１に記憶される。この時点で入力デバイス２では、参照するコントローラセットのインスタンスに基づき、インデックスにコントローラセットに含まれるコントローラパーツを登録、もしくは更新を実施する。
【００４７】
〔ユーザプログラム編集機能〕
ユーザプログラム編集機能は、制御部１０が実行するプログラムとして実現される。ユーザプログラム編集機能は、表示部１２に表示されるメニューにおいて、ユーザがユーザプログラムの編集を選択することで開始される。ユーザプログラム編集機能では、新規にユーザプログラムを作成することも、既存のユーザプログラムを編集することも可能とされる。新規にユーザプログラムを作成する場合には、ユーザはその旨のメニューを選択する。また、既存のユーザプログラムを編集する場合には、ユーザは記憶部１１に記憶された既存のユーザプログラムを選択する。
【００４８】
ユーザプログラム編集機能が開始されると、表示部１２には、編集領域Ｒ２が表示される。編集領域Ｒ２は、例えば、使用するプログラミング言語に応じて、ユーザプログラムのソースコードを編集可能なテキストエディタ、ＧＵＩブロックプログラミングを実現するためのエディタ等とするとよい。新規にユーザプログラムを作成する場合には、起動時の編集領域Ｒ２は空白の状態とされる。一方、既存のユーザプログラムを編集する場合には、編集領域Ｒ２には、起動時に選択されたユーザプログラムが表示された状態とされる。
【００４９】
ユーザは、編集領域Ｒ２内においてユーザプログラムのソースコードを編集することができる。ユーザプログラムの中では、ＧＵＩコントローラ編集機能により作成したＧＵＩコントローラに含まれているコントローラパーツや、ターゲットデバイス４に対応するドライバのインスタンスをそれぞれ識別情報により区別し、起動ブロック、エントリポイント（関数）、または変数として利用することができる。これらの利用可能なインスタンスは、ユーザインタフェースを介してユーザが適宜選択してソースコード内の任意の位置に挿入することができるように構成される。このようにして、ユーザは、各コントローラパーツに対する操作入力やドライバに対し、起動するプログラム（関数、起動ブロック）を紐づける。
【００５０】
ユーザプログラムの編集が確定（登録操作など）すると、ＧＵＩコントローラ設計支援装置１の制御部１０は、即座にプログラムの文脈を評価する。そして、文脈的に問題が無ければ、エンジン３の実行環境内でプログラム文脈が保持されることとなる。なお、いわゆるブロックプログラミングのように、ブロックとして文脈が保証されている場合には、文脈の評価を行わなくてもよい。
【００５１】
変更内容を保存する操作や自動保存機能により、編集後のユーザプログラムが記憶部１１に記憶され、ユーザが編集したプログラム言語に応じた実行環境を有するエンジン３に編集後のユーザプログラムを送信してユーザプログラムを登録することができる。なお、いわゆるブロックプログラミングのように、ブロックとして文脈が保証されている場合には、編集情報はユーザ操作に連動して即座に実行環境に登録される。
【００５２】
続いて、以上で説明したＧＵＩコントローラ設計支援装置１が適用されるリモートコントロール環境において、入力デバイス２に表示されるＧＵＩコントローラによりターゲットデバイス４を制御する手順、および既存のＧＵＩコントローラやユーザプログラムを編集し更新する際の処理の手順について説明する。
【００５３】
編集が行われる前の状態として、入力デバイス２には編集前のＧＵＩコントローラのコントローラセットが登録されており、エンジン３には編集前のユーザプログラムが登録されているものとする。
【００５４】
図２は、入力デバイス２に登録されたＧＵＩコントローラにより、エンジン３を介してターゲットデバイス４を制御する際の手順を示すフローチャートである。はじめにユーザは、上述のようにコントローラセット編集機能を用いてコントローラセットのインスタンスを生成する（ステップＳ１００）。次に、コントローラセットインスタンスに応じたユーザプログラムの実行に必要なエンジン３の実行環境を起動する（ステップＳ１１０)。このとき、入力デバイス２にコントローラセットが登録される。また、エンジン３の実行環境にはユーザプログラムが登録された状態となる。ここで、「実行環境が起動している」状態とは、実行環境が、”main”関数として無限ループを実行しつつ、プログラム実行要求や登録、更新要求など、何らかのイベントを待機している状態である。なお、コントローラセットインスタンス生成（ステップＳ１００）と実行環境の起動（ステップＳ１１０）は順不同である。
【００５５】
入力デバイス２は、登録済みのＧＵＩコントローラを表示部２２に表示しつつ、入力部２３（例えば表示部２２に重畳されたタッチパネル）に対するユーザの操作入力を受け付ける（ステップＳ１２０）。受け付けられた操作入力の内容は、操作されたコントローラパーツのインスタンスに対応する識別情報、操作に伴い検知されたパラメータ値等を含む実行要求イベントとして、エンジン３で起動されている実行環境に送られる（ステップＳ１３０）。
【００５６】
エンジン３において利用可能とされているドライバは、起動状態のターゲットデバイス４と接続され、制御信号やセンサ出力の送受信が可能な状態となっている。ドライバは、いわゆるKeep Alive方式により、接続状態を管理するとよい。一般に、ドライバは、実行環境で実行されるユーザプログラムからの呼び出しに応じて、ターゲットデバイス４に対し制御信号を送信する。また、ドライバは、ターゲットデバイス４からのセンサ出力に起因して、当該ドライバのインスタンスに対応する識別情報、センサ出力に伴う値等を含む実行要求を、エンジン３で起動されている実行環境に送る。
【００５７】
入力デバイス２のＧＵＩコントローラに対する操作やドライバからの要求により実行環境に対し実行要求イベントが発行されると、当該実行要求の元となったコントローラパーツやドライバのインスタンスに対応する起動ブロックもしくは関数が、当該実行環境に対するプログラム実行スタックとして登録される（ステップＳ１４０）。プログラム実行スタックに登録された処理は、”main”関数として実行されている無限ループのループ毎にイベント処理と共に順次実行されていくことになる（ステップＳ１５０）。
【００５８】
入力デバイス２は、登録済みのＧＵＩコントローラを表示部２２に表示しつつ、入力部２３（例えば表示部２２に重畳されたタッチパネル）に対するユーザの操作入力を受け付け、その内容をエンジン３で起動されている実行環境に送るとともに、操作入力に応じてコントーローラパーツのＧＵＩ表現（外観）を変更する（例えばアニメーション表示等）。
【００５９】
このような環境で、入力デバイス２に表示されたＧＵＩコントローラに対する操作入力に応じて、エンジン３で起動している実行環境においてユーザプログラムの対応するエントリポイントが実行され、ドライバを介してターゲットデバイス４に対する制御が実行される。
【００６０】
続いて、既存のＧＵＩコントローラやユーザプログラムを編集し更新する際の処理について説明する。図３は、既存のＧＵＩコントローラやユーザプログラムを編集し更新する際の処理の手順を示すフローチャートである。
【００６１】
ＧＵＩコントローラやユーザプログラムを編集する場合、ＧＵＩコントローラ設計支援装置１にて、ＧＵＩコントローラ編集機能やユーザプログラム編集機能を用いて、コントローラパーツ定義、配置、ユーザプログラムの編集等を行う（ステップＳ２００）。編集を終えた後、コントローラパーツ編集機能やユーザプログラム編集機能においてそれぞれの編集が確定すると（ステップＳ２２０）、コントローラセットについては入力デバイス２に、ユーザプログラムについてはエンジン３に、それぞれ登録がおこなわれる（ステップＳ２４０）。ＧＵＩコントローラやユーザプログラムの編集や登録は任意のタイミングで、入力デバイス２、エンジン３、ターゲットデバイス４の再起動を要さずに行うことができ、これによりＧＵＩコントローラを構成する各コントローラパーツに対する操作と、ターゲットデバイス４の挙動をリアルタイムで系に反映させることができる。
【００６２】
本実施形態のリモートコントロール環境では、上述とおり、エンジン３が、受け取った実行要求とエントリポイント（関数や起動ブロック）とを、実行要求に含まれるコントローラパーツのインスタンスの識別情報を利用して紐づける。編集後のＧＵＩコントローラやユーザプログラムの登録が行われると、コントローラパーツのインスタンスの識別情報とエントリポイントとの対応関係が変更され得るが、この関係は編集後のユーザプログラムにおいて規定され、エンジン３の実行環境に登録されることになる（ステップＳ２６０）。また、ＧＵＩコントローラの構成を示すコントローラセットの更新が入力デバイス２に登録されると、更新の内容に応じて、入力デバイス２に表示されるＧＵＩコントローラの表示、コントローラパーツからの通知等が変更される。
【００６３】
起動している実行環境は、登録の前後に亘ってmain関数として無限ループを実行し続ける。更新後のＧＵＩコントローラやユーザプログラムが登録されると、同名の関数や変数は新たな値に置き換わる場合があるが、更新の前にプログラム実行スタックに登録された実行要求に紐づく関数については、更新前のユーザプログラムにて規定されている関数が実行される。そして、更新後にプログラム実行スタックに登録された実行要求については新しいユーザプログラムにて規定されている関数が実行される（ステップＳ２８０）ことになる。
【００６４】
以上で説明した本実施形態におけるＧＵＩコントローラ設計支援装置によれば、柔軟かつリアルタイムに制御やグラフィック表現を変更可能なコントローラ装置のプログラミングを支援することが可能となる。
【００６５】
なお、上記に本実施形態を説明したが、本発明はこれらの例に限定されるものではない。例えば、上記の実施形態では、ＧＵＩコントローラ設計支援装置１、入力デバイス２、およびエンジン３が個別のハードウェアとして実現されたが、これらのうちの複数又は全てを１つのハードウェア（例えば、１台のコンピュータ）により実現してもよい。また、前述の各実施形態に対して、当業者が適宜、構成要素の追加、削除、設計変更を行ったものや、各実施形態の特徴を適宜組み合わせたものも、本発明の要旨を備えている限り、本発明の範囲に含有される。
【符号の説明】
【００６６】
１  ＧＵＩコントローラ設計支援装置
２  入力デバイス
３  エンジン
４  ターゲットデバイス
ＮＷ  ネットワーク
【要約】
柔軟かつリアルタイムに制御やグラフィック表現を変更可能なコントローラ装置のプログラミングを支援することのできるＧＵＩコントローラ設計支援装置を提供する。
ＧＵＩコントローラ設計支援装置は、入力デバイスのタッチパネルディスプレイに表示され、ターゲットデバイスを操作するための操作入力を受け付けるＧＵＩコントローラの設計を支援する。ＧＵＩコントローラ設計支援装置は、複数のコントローラパーツにより構成されＧＵＩコントローラを定義するコントローラセットを編集するためのＧＵＩコントローラ編集手段と、ＧＵＩコントローラに対する操作入力に応じたターゲットデバイスの制御を規定するユーザプログラムを編集するためのユーザプログラム編集手段と、を備える。【図１】
0006684513.tif 000002
【図２】
0006684513.tif 000003
【図３】
0006684513.tif 000004