Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Yuki Suga (ysuga@ysuga.net)
RTミドルウエア
リファレンスハードウエア
OROCHI
ysuga.net 菅 佑樹
2012/7/11 1ROBOTECH2012 RTミドルウエア講習会
Yuki Suga (ysuga@ysuga.net)
RTコンポーネントとは何か
• RT要素 = 「RTコンポーネント (Robotics Technology Component, RTC)」
– RTCは「ポート」を持ち,他のRTCと接...
Yuki Suga (ysuga@ysuga.net)
RTミドルウエアを使ったシステム開発イメージ
~モジュールを使うソフトウエアをインストール~
2012/7/11
RTシステムインテグレータ
3ROBOTECH2012 RTミドルウエア講...
Yuki Suga (ysuga@ysuga.net)
RTミドルウエアを使ったシステム開発
~単体テストが容易~
• 各RT要素のRTCの仕様に応じて,簡単に動か
してみることが出来る
Double型二つのデータ=ロボットの移動速度
2012...
Yuki Suga (ysuga@ysuga.net)
RTミドルウエアを使ったシステム開発
~モジュールの接続~
コントローラの入力に追従処理
センサによる障害物回避
アーム・台車の制御
2012/7/11 5ROBOTECH2012 ...
Yuki Suga (ysuga@ysuga.net)
リファレンスハードウエア
• NEDO次世代ロボット知能化プロジェクト(2007~2012)
• 各プロジェクトチームからのRTコンポーネントの動作検証お
よび統合用プラットフォームロボッ...
Yuki Suga (ysuga@ysuga.net)
リファレンスロボットアーム
「OROCHI」
• 垂直多関節型ロボットアーム
– 全長 835[mm]
– 重量 11.2 [kg]
– 可搬重量 2 [kg]
– アーム6自由度
– グ...
Yuki Suga (ysuga@ysuga.net)
専用API付属
• liborochi (仮称)
– C++,Java対応
– Windows,Linux対応
– 順逆運動学ライブラリ
– 各関節制御
• 位置速度制御
• 速度制御
•...
Yuki Suga (ysuga@ysuga.net)
対応RTコンポーネント付属
• 共通インターフェース仕様書
– “コンポーネントの相互接続性や相互運用性を確保”
– http://openrtm.org/openrtm/ja/proje...
Yuki Suga (ysuga@ysuga.net)
ロボットアーム制御機能
共通インターフェース
• ロボットアーム制御機能共通インターフェース仕様書(第1.0版)
– “本仕様書では、6自由度あるいは7自由度を有するマニピュレータ及び
そ...
Yuki Suga (ysuga@ysuga.net)
インターフェースのレベル
• 低レベル
– 関節単位の位置を直接指令
• 中レベル
– 関節座標空間における直線補完 (PTP制御)
– 直交座標空間における直線補完 (CP制御)
• 高...
Yuki Suga (ysuga@ysuga.net)
低レベルインターフェース
• 共通インターフェース
– 「ManiplatorCommonInterface_Common」
• 各関節位置フィードバック情報
• 関節ユニットの状態取得
...
Yuki Suga (ysuga@ysuga.net)
中レベルインターフェース
• 共通インターフェース
– 「ManiplatorCommonInterface_Common」
• 中レベル共通インターフェース
– 「ManiplatorC...
Yuki Suga (ysuga@ysuga.net)
中レベルインターフェースを使う
• サービスポートを使わなくてはならない
– サービスポートは,データの交換だけでなく,関
数を呼び出すのと同じ
– 関数の宣言はIDLファイルで行う
20...
Yuki Suga (ysuga@ysuga.net)
ManipulatorCommonInterface_Middle
Level.idl (抜粋)
2012/7/11 ROBOTECH2012 RTミドルウエア講習会 15
interfa...
Yuki Suga (ysuga@ysuga.net)
RTC Builder + ServicePort
• Add Port – (ポートを作る)
– ポートはインターフェースの出口
2012/7/11 ROBOTECH2012 RTミドル...
Yuki Suga (ysuga@ysuga.net)
RTC Builder + ServicePort
• Add Interface – (インターフェースを作る)
– インターフェースがクラス的なもの
2012/7/11 ROBOTEC...
Yuki Suga (ysuga@ysuga.net)
ManipulatorCommonInterface_Middle
Level.idl (抜粋)
2012/7/11 ROBOTECH2012 RTミドルウエア講習会 18
interfa...
Yuki Suga (ysuga@ysuga.net)
ManipulatorCommonInterface_Middle
Level.idl (抜粋)
2012/7/11 ROBOTECH2012 RTミドルウエア講習会 19
interfa...
Yuki Suga (ysuga@ysuga.net)
ManipulatorCommonInterface_Middle
Level.idl (抜粋)
2012/7/11 ROBOTECH2012 RTミドルウエア講習会 20
interfa...
Yuki Suga (ysuga@ysuga.net)
ManipulatorCommonInterface_DataTy
pe.idl (抜粋)
2012/7/11 ROBOTECH2012 RTミドルウエア講習会 21
typedef se...
Yuki Suga (ysuga@ysuga.net)
ManipulatorCommonInterface_Middle
Level.idl (抜粋)
2012/7/11 ROBOTECH2012 RTミドルウエア講習会 22
interfa...
Yuki Suga (ysuga@ysuga.net)
ManipulatorCommonInterface_Middle
Level.idl (抜粋)
2012/7/11 ROBOTECH2012 RTミドルウエア講習会 23
typedef...
Yuki Suga (ysuga@ysuga.net)
2012/7/11 ROBOTECH2012 RTミドルウエア講習会 24
RTC::ReturnCode_t ModuleName::onExecute(RTC::UniqueId ec...
Yuki Suga (ysuga@ysuga.net)
幸いにも
• 動きをシミュレーション (Choreonoid)で確認で
きる
– Choreonoid.org
– 専用のプラグインが必要になる
2012/7/11 ROBOTECH201...
Upcoming SlideShare
Loading in …5
×

2013 summercamp 02

2,125 views

Published on

  • Be the first to comment

  • Be the first to like this

2013 summercamp 02

  1. 1. Yuki Suga (ysuga@ysuga.net) RTミドルウエア リファレンスハードウエア OROCHI ysuga.net 菅 佑樹 2012/7/11 1ROBOTECH2012 RTミドルウエア講習会
  2. 2. Yuki Suga (ysuga@ysuga.net) RTコンポーネントとは何か • RT要素 = 「RTコンポーネント (Robotics Technology Component, RTC)」 – RTCは「ポート」を持ち,他のRTCと接続・通信可能 – RTCは「状態」を持ち,それらの遷移によってシステム管理 • CREATED (初期化前の状態), INACTIVE (非実行状態),ACTIVE (実行状態),ERROR (エラー) – RTCは特定のタイミングで呼ばれるイベントハンドラを持つ • onActivated ・・・ ACTIVE化の際に一度 • onDeactivated ・・・ INACTIVE化の際に一度 • onExecute ・・・ ACTIVE状態の場合に周期的に呼ばれる – RTCのイベントハンドラは実行コンテキストによって呼ばれる • リアルタイム周期実行可能な実行コンテキスト • シミュレータに合わせて実行周期を同期する実行コンテキスト • RTCの組合せによってロボットシステムを開発する 2012/7/11 2ROBOTECH2012 RTミドルウエア講習会
  3. 3. Yuki Suga (ysuga@ysuga.net) RTミドルウエアを使ったシステム開発イメージ ~モジュールを使うソフトウエアをインストール~ 2012/7/11 RTシステムインテグレータ 3ROBOTECH2012 RTミドルウエア講習会
  4. 4. Yuki Suga (ysuga@ysuga.net) RTミドルウエアを使ったシステム開発 ~単体テストが容易~ • 各RT要素のRTCの仕様に応じて,簡単に動か してみることが出来る Double型二つのデータ=ロボットの移動速度 2012/7/11 4ROBOTECH2012 RTミドルウエア講習会
  5. 5. Yuki Suga (ysuga@ysuga.net) RTミドルウエアを使ったシステム開発 ~モジュールの接続~ コントローラの入力に追従処理 センサによる障害物回避 アーム・台車の制御 2012/7/11 5ROBOTECH2012 RTミドルウエア講習会
  6. 6. Yuki Suga (ysuga@ysuga.net) リファレンスハードウエア • NEDO次世代ロボット知能化プロジェクト(2007~2012) • 各プロジェクトチームからのRTコンポーネントの動作検証お よび統合用プラットフォームロボット 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 6 前川製作所
  7. 7. Yuki Suga (ysuga@ysuga.net) リファレンスロボットアーム 「OROCHI」 • 垂直多関節型ロボットアーム – 全長 835[mm] – 重量 11.2 [kg] – 可搬重量 2 [kg] – アーム6自由度 – グリッパー1自由度 – 電源 24[VDC], 10[A] – 通信方式 CAN 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 7
  8. 8. Yuki Suga (ysuga@ysuga.net) 専用API付属 • liborochi (仮称) – C++,Java対応 – Windows,Linux対応 – 順逆運動学ライブラリ – 各関節制御 • 位置速度制御 • 速度制御 • 電流制御 – サンプルプログラム添付 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 8
  9. 9. Yuki Suga (ysuga@ysuga.net) 対応RTコンポーネント付属 • 共通インターフェース仕様書 – “コンポーネントの相互接続性や相互運用性を確保” – http://openrtm.org/openrtm/ja/project/Recommendation_CommonIF – 移動ロボット – コミュニケーション機能 – ロボットアーム – 双腕ロボット – 作業系画像認識 – カメラ機能 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 9
  10. 10. Yuki Suga (ysuga@ysuga.net) ロボットアーム制御機能 共通インターフェース • ロボットアーム制御機能共通インターフェース仕様書(第1.0版) – “本仕様書では、6自由度あるいは7自由度を有するマニピュレータ及び その先端にエンドエフェクタとして1軸グリッパを取り付けたロボットアー ムを制御するための共通インタフェース(ACT インタフェース)を規定” – 座標系,データ型,単位,インターフェース(関数名)を規定 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 10
  11. 11. Yuki Suga (ysuga@ysuga.net) インターフェースのレベル • 低レベル – 関節単位の位置を直接指令 • 中レベル – 関節座標空間における直線補完 (PTP制御) – 直交座標空間における直線補完 (CP制御) • 高レベル – JOB実行を行うインターフェース 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 11
  12. 12. Yuki Suga (ysuga@ysuga.net) 低レベルインターフェース • 共通インターフェース – 「ManiplatorCommonInterface_Common」 • 各関節位置フィードバック情報 • 関節ユニットの状態取得 • サーボON/OFF • 位置指令 • 位置フィードバック 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 12
  13. 13. Yuki Suga (ysuga@ysuga.net) 中レベルインターフェース • 共通インターフェース – 「ManiplatorCommonInterface_Common」 • 中レベル共通インターフェース – 「ManiplatorCommonIterface_Middle」 • グリッパ開閉 • 手先位置フィードバック(順運動学) • 直交座標系における直線起動での手先移動(CP制御) • 関節座標系における直線起動での手先移動(PTP制御) • 動作時の速度設定 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 13
  14. 14. Yuki Suga (ysuga@ysuga.net) 中レベルインターフェースを使う • サービスポートを使わなくてはならない – サービスポートは,データの交換だけでなく,関 数を呼び出すのと同じ – 関数の宣言はIDLファイルで行う 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 14
  15. 15. Yuki Suga (ysuga@ysuga.net) ManipulatorCommonInterface_Middle Level.idl (抜粋) 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 15 interface ManipulatorCommonInterface_Middle { RTC::RETURN_ID closeGripper(); RTC::RETURN_ID getFeedbackPosCartesian(out RTC::CarPosWithElbow pos); RTC::RETURN_ID moveGripper(in RTC::ULONG angleRatio); RTC::RETURN_ID moveLinearCartesianAbs(in RTC::CarPosWithElbow carPoint); RTC::RETURN_ID movePTPJointAbs(in RTC::JointPos jointPoints); RTC::RETURN_ID openGripper(); };
  16. 16. Yuki Suga (ysuga@ysuga.net) RTC Builder + ServicePort • Add Port – (ポートを作る) – ポートはインターフェースの出口 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 16
  17. 17. Yuki Suga (ysuga@ysuga.net) RTC Builder + ServicePort • Add Interface – (インターフェースを作る) – インターフェースがクラス的なもの 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 17 インターフェース名はすべて, 下のインターフェースタイプと 同じにしておくと便利. 使う側は「Required」 Var Name はプログラム内の 変数名 IDLファイルを指定する
  18. 18. Yuki Suga (ysuga@ysuga.net) ManipulatorCommonInterface_Middle Level.idl (抜粋) 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 18 interface ManipulatorCommonInterface_Middle { RTC::RETURN_ID closeGripper(); RTC::RETURN_ID getFeedbackPosCartesian(out RTC::CarPosWithElbow pos); RTC::RETURN_ID moveGripper(in RTC::ULONG angleRatio); RTC::RETURN_ID moveLinearCartesianAbs(in RTC::CarPosWithElbow carPoint); RTC::RETURN_ID movePTPJointAbs(in RTC::JointPos jointPoints); RTC::RETURN_ID openGripper(); };
  19. 19. Yuki Suga (ysuga@ysuga.net) ManipulatorCommonInterface_Middle Level.idl (抜粋) 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 19 interface ManipulatorCommonInterface_Middle { RTC::RETURN_ID closeGripper(); RTC::RETURN_ID getFeedbackPosCartesian(out RTC::CarPosWithElbow pos); RTC::RETURN_ID moveGripper(in RTC::ULONG angleRatio); RTC::RETURN_ID moveLinearCartesianAbs(in RTC::CarPosWithElbow carPoint); RTC::RETURN_ID movePTPJointAbs(in RTC::JointPos jointPoints); RTC::RETURN_ID openGripper(); }; これらは呼べばいいだけ
  20. 20. Yuki Suga (ysuga@ysuga.net) ManipulatorCommonInterface_Middle Level.idl (抜粋) 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 20 interface ManipulatorCommonInterface_Middle { RTC::RETURN_ID closeGripper(); RTC::RETURN_ID getFeedbackPosCartesian(out RTC::CarPosWithElbow pos); RTC::RETURN_ID moveGripper(in RTC::ULONG angleRatio); RTC::RETURN_ID moveLinearCartesianAbs(in RTC::CarPosWithElbow carPoint); RTC::RETURN_ID movePTPJointAbs(in RTC::JointPos jointPoints); RTC::RETURN_ID openGripper(); }; JointPos型の引数が必要になる(言語依存)
  21. 21. Yuki Suga (ysuga@ysuga.net) ManipulatorCommonInterface_DataTy pe.idl (抜粋) 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 21 typedef sequence<double> JointPos; JointPos型はdoubleの配列
  22. 22. Yuki Suga (ysuga@ysuga.net) ManipulatorCommonInterface_Middle Level.idl (抜粋) 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 22 interface ManipulatorCommonInterface_Middle { RTC::RETURN_ID closeGripper(); RTC::RETURN_ID getFeedbackPosCartesian(out RTC::CarPosWithElbow pos); RTC::RETURN_ID moveGripper(in RTC::ULONG angleRatio); RTC::RETURN_ID moveLinearCartesianAbs(in RTC::CarPosWithElbow carPoint); RTC::RETURN_ID movePTPJointAbs(in RTC::JointPos jointPoints); RTC::RETURN_ID openGripper(); }; CarPosWithElbowは,変換行列の3x4部分
  23. 23. Yuki Suga (ysuga@ysuga.net) ManipulatorCommonInterface_Middle Level.idl (抜粋) 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 23 typedef double HgMatrix [3][4]; struct CarPosWithElbow { HgMatrix carPos; double elbow; ULONG structFlag; }; HgMatrixが3x4行列の本体
  24. 24. Yuki Suga (ysuga@ysuga.net) 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 24 RTC::ReturnCode_t ModuleName::onExecute(RTC::UniqueId ec_id) { m_commonMiddle->openGripper(); coil::usleep(5000*1000); m_commonMiddle->closeGripper(); coil::usleep(5000*1000); JointPos pos; pos.length(6); pos[0] = 0; pos[1] = 0.5; pos[2] = 0; pos[3] = 0; pos[4] = 0; pos[5] = 0; m_commonMiddle->movePTPJointAbs(pos); CarPosWithElbow carPos; m_commonMiddle->getFeedbackPosCartesian(carPos); std::cout << "X=" << carPos.carPos[0][3] << std::endl; std::cout << "Y=" << carPos.carPos[1][3] << std::endl; std::cout << "Z=" << carPos.carPos[2][3] << std::endl; carPos.carPos[2][3] += 50; //[mm] m_commonMiddle->moveLinearCartesianAbs(carPos); return RTC::RTC_OK; }
  25. 25. Yuki Suga (ysuga@ysuga.net) 幸いにも • 動きをシミュレーション (Choreonoid)で確認で きる – Choreonoid.org – 専用のプラグインが必要になる 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 25

×