ようやく形になってきた

現在開発中の新しいVPLであるFluoが少しずつ形になってきた。
Fluoは、データフロー風のメッセージ送信をベースとしたビジュアルなプログラミング環境であり、さまざまな入力データを「流れ」として捉え、少しずつ加工しながら出力データを作り出して行くもの。
もともとフィジカル系のデバイスから得るデータの処理に困ったときに、よりハンドリングしやすい環境が欲しいと思って作りはじめた。
ROSがtopicを介して通信することにインスパイアされ、その仕組みをSmalltalkにおけるメッセージ送信で実現しつつ、Pharoの強力な開発環境も利用できるように改良を続けてきた。

初期の頃に書いたFluoの説明はこちら

まだ開発は半ばで、どんなノードをどのように使うのがスマートなのか模索している。
ただ、当初思い描いていた機能の多くは実現できてきたように思う。
Fluo - TurtlesimBumperDemo

上のグラフはタートルの移動中の衝突時に行う動作を記述したプログラムである。これは動作テストのためのもので実際にはROS経由で何らかのロボットを動かすことを想定している。

  1. 画面左側に並んだボタンの中から→(Open)ボタンを選ぶとプログラムが起動する。
  2. 起動によってTimerがスタートし、1秒間隔で3つのDataPackBehaviorにtickメッセージを送る。
  3. それぞれのBehaviorはTurtleを前進、後退、右回転させるためのデータを生成し、Timerからのメッセージに従ってデータを送信する。
  4. Inhibitorは通常はラベルのないアークから受けとったデータを下流に垂れ流すだけだが、tickメッセージを受け取ると一定時間だけラベルの付いたアークからデータを流すようになる。
  5. 通常、左上のInhibitorは前進データをTurtleに送るが、左下のボタンが押されてtickメッセージを受け取ったときだけ、10秒間右下のInhivitorからのデータを送る。
  6. 右下のInhibitorは、通常は右回転し、tickメッセージ受信で5秒間後退するデータを送信する。
  7. ボタンからのtickメッセージは2つのInhibitorに同じタイミングで送られるので、実際にはTurtleは5秒間後退した後、残り5秒間右回転した後、前進を再開する。

ざっとこんな感じの動作内容である。
1つのノードから発せられるデータは、アークで接続された全てのノードに配信されるので、全体のノードが並列的に動作する。
途中に流れるデータの様子が知りたければTranscriptに出したり、グラフとして表示することができる。
まだいろんな応用で使えるようなBehaviorは不足しているが、今後少しずつ充実させていく予定である。