ソフトウェア関連 >> 通信ネットワークを利用したメカトロシステム技術研究会
第4回研究会
下記の日程で講演を行います。
- 日時
- 平成26年8月19日(火) 14:00~17:00
- 場所
- テクノアークしまね 4F 大会議室
- 講演
- 国内外のメカトロシステム構築法(RTミドルウェア・ROS)の紹介
講演内容および資料
本講演では、前半はロボット用のミドルウェアであるRTミドルウェアについての紹介を行います。また、近年、ロボット研究で広く利用さているROSについてもその基本機能について概説し、RTミドルウェアとの類似点、相違点について解説いたします。
後半では、RTミドルウェアを使ったコンポーネント開発の方法を概説し、ロボットシミュレータを使ってロボットハンドを操作するプログラム開発について実習を行います。
講演会の資料は下記の通りです。
上でPDFが表示できない方は、下のリンクからダウンロードしてください
添付ファイル:RTM_and_ROS.pdf
添付ファイル:OpenRTM_develop.pdf
実習の準備について
研究会の後半で行う次週は、ノートパソコン上でOpenRTM-aist-1.1.0およびChoreonoid-1.4を利用して、シミュレータ上のPA10というロボットハンドを操作するコンポーネントの開発を行います。
実習に必要なもの
- Windows7以降が動作するノートパソコン(Core2Duo以降、メモリ4G以上)
- Visual C++ 2010 Express
- Visual C++ 2010 ServicePack v1
- OpenRTM-aist-1.1.0 for VC++2010
- CMake-2.8.12.2
- Doxygen
- Python 2.6
- PyYAML(ダウンロードできない場合には、添付資料からダウンロードしてください)
上記をインストール後、添付のソフトウェアをダウンロードし、適当なフォルダに展開してください。上記のソフトウェアは、できれば日本をを使っていないフォルダに入れるようにしてください。Windows7 では、まれに日本語のフォルダが原因で動作不良になる場合があります。
添付ファイル:Demo.zip
実習内容
実習では、Demo.zipに含まれているChoreonoid-PA10.batを利用して、Choreonoid内のPA10というロボットアームを使って、シミュレーション内の緑色の箱を黄色の台の上に移動させるような制御プログラムを作成します。使用するChoreonodの環境を下図に示します。
また、この環境では、ロボットアームを制御するためのRTCは、下のようになっています。
PA10PosControllerRTCは、外部のRTCからハンドの目標位置姿勢と移動時間(target_q)、ハンドの開閉命令(command)を受け取りPA10を動作させます。また、出力データポート(q_out)からは、現在のハンドの位置姿勢を出力しています。
したがって、このロボットアームを動作させるには、(x, y, z, roll, pitch, yaw, time)のデータをtarget_qへ入力するような出力データポート(TimedDoubleSeq型)とハンドの開閉命令("Close" or "Open")をcommandへ入力する出力データポート(TimedString型)を実装したRTCを作成すればいいでしょう。
このとき、どのようなタイミングでデータを出力させるかを決定するためには、現在のロボットアームの状態を知っておく必要があるため、PA10PosControllerRTCからの現在の位置を出力するデータポート(q_out, TimedDoubleSeq型)と接続する入力データポートも実装する必要があると思います。
結局、下図のようなRTCを作成すればよいでしょう。
このようなRTCに対するプロファイルは、下のようになります。
添付ファイル:PA10Sample.xml
コアロジックの実装
コアロジックを実装する前に、ロボットアームがどのように動けばよいかを考察します。
この例では、PA10Pickupというプロジェクトファイルと同じ状態ですので、下記のように動かせばよいことがわかります。
ハンドの位置座標(m) | ハンドの姿勢(deg) | |
(0)初期姿勢 | 0.0, 0.025, 1.2 | 0, 0, 0 |
(1)緑の箱へのアプローチ点 | 0.9, 0.0, 0.25 | 180, 0, 0 |
(2)緑の箱の把持点 | 0.9, 0.0, 0.20 | 180, 0, 0 |
(3)把持後のリリース点 | 0.6, 0.0, 0.60 | 180, 0, 0 |
(4)搬送位置へのアプローチ点 | 0.0, 0.65, 0.6 | 180, 0, 90 |
(5)搬送位置 | 0.0, 0.65, 0.5 | 180, 0, 90 |
(6)搬送後のリリース点 | 0.0, 0.65, 0.6 | 180, 0, 90 |
(7)初期姿勢 | 0.0, 0.025, 1.2 | 0.0, 0.0, 0.0 |
緑の箱を把持する点は上の表の(2)に到達後、(3)へ移動前にCloseコマンドを送信し、把持終了まで待つ必要があります。把持終了かどうかの判定の情報は、PA10PosControllerRTCからは直接出力できませんので、一定時間待つかなんらかの方法で把持動作終了を検出する必要があります。
今回の実習では、簡単にするために一定時間待つようにしましょう。
把持動作が終了したかどうかの判定と同様に、目標位置姿勢に移動終了の判定も直接的なフラグの出力はありませんが、ロボットアームの現在位置姿勢を得ることができますので、現在のハンドの位置姿勢と前に与えた目標位置姿勢のデータを比較すれば、到達下かどうかの判定は可能です。
以上のことを考慮すると下のようなアルゴリズムを実装できれば,ロボットハンドは一連の動作をすることができるということがわかります。(実習で作成するRTCをPA10Sampleとします)
- PA10Sampleがアクティベートされたときに、初期姿勢になるように目標位置姿勢をPA10PosContollerRTCに送信する
- ロボットハンドが動作し始めると現在の位置姿勢が送信されてきますので、与えた目標位置姿勢と現在の位置姿勢の差分dを計算する
- dのノルムが十分に小さい場合、目標位置姿勢に到達したと考えられるので、次の目標位置姿勢をPA10PosControllerRTCに送信する
- 以降2,3を繰り返す
このアルゴリズムを実装したプログラムは下の添付のようになります。
添付ファイル:PA10Sample.cpp
添付ファイル:PA10Sample.h
上記のアルゴリズムでは、物体把持とリリースの動作がありませんので、適当な部分に把持、リリース動作を追加実装してみてください。
資料