概要
「RTM Box Coding」は,ロボットミドルウェアの初学者向けのWebベースのビジュアルプログラミングツールです.
本研究では,プログラミング教育,及び,ロボット制御を目的とした既存のビジュアルプログラミングツールを比較検討しました. その結果,ロボットシステム開発で将来的に不可欠となるテキストプログラミングに繋げる学習ツールとして,
(1)利用するロボットミドルウェア特有の性質を理解できること
(2)変数と命令の組み合わせで動作を指定すること
(3)ビジュアルプログラミングで用いるオブジェクトとソースコードの対応関係を確認すること
の3点の要求仕様を抽出し,この考えに基づいて,システム設計及び実装を行いました.
RTミドルウェアの特徴
本ツールは,日本の産業技術総合研究所が開発したRTミドルウェアを実装した「OpenRTM-aist」をサポートするものです.
RTミドルウェアでは,ロボットに用いられる要素技術をRTコンポーネント(RTC, RT-Component)としてカプセル化し,それらの組合せでシステムを構築します. これにより,資産の再利用性の向上,及びシステム開発の効率化を狙っています.
RTCは基本的に以下に示す状態をもち,それぞれの状態遷移(ライフサイクル)を理解した上で,RTCを作成することが必要となります.
• 生成状態(Created)
• 活動状態(Alive)
– 非アクティブ状態(Inactive)
– アクティブ状態(Active)
– エラー状態(Error)
さらに,RTCの実装では,通常のプログラムとは異なり,main関数に実行する処理内容を直接記述することはありません. 上述した,各状態や遷移時に,あらかじめ決められた関数(コールバック関数)が実行コンテキストから呼ばれるため,どのタイミングで行いたい処理なのかを設計した上で,該当の関数に処理を記述します.
主なコールバック関数と,それぞれの関数が呼ばれるタイミング以下に示します.
関数名 | 概要 |
---|---|
onInitialize | ライフサイクル初期化時に1度だけ呼ばれる. |
onActivated | アクティブ化する際に1回呼ばれる. |
onDeactivated | 非アクティブ化する際に1回呼ばれる. |
onExecute | アクティブ状態にあるとき周期的に呼ばれる. |
基本利用方法
本ツールでは,ボックスを組み合わせてコーディングを行います.
本ツールで用意している,プログラムを構成するためのボックス一覧を以下に示します.
【onInitializeタブ】
1. RT-Componentの基本設定を行う
カテゴリ『RTミドルウェア』から 「入力/出力ポート追加」を選択. ポートの名称を入力し、データタイプを選ぶ.
2. プログラムに必要な変数を予め宣言する
カテゴリ『変数』から「値の宣言」を選択. 変数の名称を入力し、データタイプを選ぶ.
↓
ここで宣言した,入力ポート/出力ポート/変数を使って,プログラムを作成していく.
【onExecuteタブ】
3. RT-Componentの実行中に行われる処理を記述する
(例)入力ポートからデータを受け取り,処理を行い,出力ポートにデータを渡す.
「入力ポートから読み込み」を選択.
どのポートのデータを読み込むのか選ぶ.
「値の代入」を選択.
(デフォルトでは変数に整数を代入する.)
どの変数に代入するのか選ぶ.
整数ボックスを選択した状態で,「入力ポートのデータにアクセス」を選択.
:
同じ要領で繰り返し処理,計算などを記述.
:
「値の代入」を選択.
変数ボックスを選択した状態で,「出力ポートのデータにアクセス」を選択.
どのポートのデータに書き込むのか選ぶ.
「出力ポートに書き込み」を選択.
【Launchボタン】
4. RT-Componentを起動する
デモ
こちらが本ツールを用いたプログラム作成のデモの様子になります.
ソフトウェア
ソースコードはgithub.com上で配布しています。下記からクローンして使用してください。
( https://github.com/ogata-lab/rtm_block_coding.dart )