13.4 モータを制御したい

Problem

HARK から直接モータの制御をしたい.

Solution

HARK 自体は聴覚処理のためのソフトウェアであるため,モータを制御 するためのモジュールは含まれていない.しかし, 比較的簡単な制御を行う場合は,モータを制御するモジュールを自作する ことで対応が可能である.ここでは,モータの制御をサーバ/クライアント 2つのアプリケーションに分け,そのうちのクライアント部をモジュール として HARK に実装する方法を説明する.

以下はクライアントモジュールの主な処理の例である.

function calculat

  1. if count = 0 then

  2. set_IP_address_and_PORT_number

  3. connect_to_server

  4. endif

  5. obtain_input

  6. generate_control_input

  7. send_control_input

  8. check_motor_state

function destructor

  1. 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節の「ロボットを制御したい」が 参考となる.