Problem
HARK から直接モータの制御をしたい.
Solution
HARK 自体は聴覚処理のためのソフトウェアであるため,モータを制御 するためのモジュールは含まれていない.しかし, 比較的簡単な制御を行う場合は,モータを制御するモジュールを自作する ことで対応が可能である.ここでは,モータの制御をサーバ/クライアント 2つのアプリケーションに分け,そのうちのクライアント部をモジュール として HARK に実装する方法を説明する.
以下はクライアントモジュールの主な処理の例である.
function calculat
if count = 0 then
set_IP_address_and_PORT_number
connect_to_server
endif
obtain_input
generate_control_input
send_control_input
check_motor_state
function destructor disconnect_to_server
1つ目の calcurate 関数は初めて呼ばれたときに TCP/IP 接続に関係する 処理を1度だけ行い,それ以外の時は同じ処理を繰り返す. TCP/IP 接続を行うため,この関数が初めて呼ばれたとき,指定された IPアドレス・ポートに設定を行い,サーバアプリケーションに接続する (2・3行目).一度サーバアプリケーションに接続すると,入力から 制御コマンドを生成する処理を繰り返す.はじめに入力を受け取り, そのデータを元にモータ制御用のコマンドを作成する.そのコマンドを サーバアプリケーションに送り,正しくコマンドが送れたか確認を行う.
2つ目の destructor 関数はモジュールのデストラクタを表し,ここでは サーバとの接続を切断する処理を行う.
サーバアプリケーションはクライアントモジュールからの制御コマンドを 受け取り,それに従い実際にモータを駆動させる.このサーバアプリ ケーションはモータ依存となるため説明は省略する.
Discussion
Flowdesigner はデータフロー指向であるため,1つでも時間のかかる 処理を行うノードがある場合,リアルタイム処理を行うことが困難と なる場合がある.そこで,Flowdesigner 上での処理はモータを制御 するコマンドの生成にとどめ,実際にモータを動かす処理を別の サーバアプリケーションで行うことで負荷を低減させることができる. また,サーバとクライアントとして切り分けることで,別のモータを制御 したい場合でもインターフェースを変更するだけで対応可能となる.
See Also
実際にモータ制御用モジュールを作成する際には,12.1節の「ノードを 作りたい」が参考になる.また,より複雑なモータの制御や他のセンサ などと組み合わせたい場合には,12.2節の「ロボットを制御したい」が 参考となる.