現在開発中の新しいVPLであるFluoが少しずつ形になってきた。
Fluoは、データフロー風のメッセージ送信をベースとしたビジュアルなプログラミング環境であり、さまざまな入力データを「流れ」として捉え、少しずつ加工しながら出力データを作り出して行くもの。
もともとフィジカル系のデバイスから得るデータの処理に困ったときに、よりハンドリングしやすい環境が欲しいと思って作りはじめた。
ROSがtopicを介して通信することにインスパイアされ、その仕組みをSmalltalkにおけるメッセージ送信で実現しつつ、Pharoの強力な開発環境も利用できるように改良を続けてきた。
初期の頃に書いたFluoの説明はこちら。
まだ開発は半ばで、どんなノードをどのように使うのがスマートなのか模索している。
ただ、当初思い描いていた機能の多くは実現できてきたように思う。
上のグラフはタートルの移動中の衝突時に行う動作を記述したプログラムである。これは動作テストのためのもので実際にはROS経由で何らかのロボットを動かすことを想定している。
- 画面左側に並んだボタンの中から→(Open)ボタンを選ぶとプログラムが起動する。
- 起動によってTimerがスタートし、1秒間隔で3つのDataPackBehaviorにtickメッセージを送る。
- それぞれのBehaviorはTurtleを前進、後退、右回転させるためのデータを生成し、Timerからのメッセージに従ってデータを送信する。
- Inhibitorは通常はラベルのないアークから受けとったデータを下流に垂れ流すだけだが、tickメッセージを受け取ると一定時間だけラベルの付いたアークからデータを流すようになる。
- 通常、左上のInhibitorは前進データをTurtleに送るが、左下のボタンが押されてtickメッセージを受け取ったときだけ、10秒間右下のInhivitorからのデータを送る。
- 右下のInhibitorは、通常は右回転し、tickメッセージ受信で5秒間後退するデータを送信する。
- ボタンからのtickメッセージは2つのInhibitorに同じタイミングで送られるので、実際にはTurtleは5秒間後退した後、残り5秒間右回転した後、前進を再開する。
ざっとこんな感じの動作内容である。
1つのノードから発せられるデータは、アークで接続された全てのノードに配信されるので、全体のノードが並列的に動作する。
途中に流れるデータの様子が知りたければTranscriptに出したり、グラフとして表示することができる。
まだいろんな応用で使えるようなBehaviorは不足しているが、今後少しずつ充実させていく予定である。