2013 summercamp 02

  • 1,301 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,301
On Slideshare
0
From Embeds
0
Number of Embeds
3

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Yuki Suga (ysuga@ysuga.net) RTミドルウエア リファレンスハードウエア OROCHI ysuga.net 菅 佑樹 2012/7/11 1ROBOTECH2012 RTミドルウエア講習会
  • 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. Yuki Suga (ysuga@ysuga.net) RTミドルウエアを使ったシステム開発イメージ ~モジュールを使うソフトウエアをインストール~ 2012/7/11 RTシステムインテグレータ 3ROBOTECH2012 RTミドルウエア講習会
  • 4. Yuki Suga (ysuga@ysuga.net) RTミドルウエアを使ったシステム開発 ~単体テストが容易~ • 各RT要素のRTCの仕様に応じて,簡単に動か してみることが出来る Double型二つのデータ=ロボットの移動速度 2012/7/11 4ROBOTECH2012 RTミドルウエア講習会
  • 5. Yuki Suga (ysuga@ysuga.net) RTミドルウエアを使ったシステム開発 ~モジュールの接続~ コントローラの入力に追従処理 センサによる障害物回避 アーム・台車の制御 2012/7/11 5ROBOTECH2012 RTミドルウエア講習会
  • 6. Yuki Suga (ysuga@ysuga.net) リファレンスハードウエア • NEDO次世代ロボット知能化プロジェクト(2007~2012) • 各プロジェクトチームからのRTコンポーネントの動作検証お よび統合用プラットフォームロボット 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 6 前川製作所
  • 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. Yuki Suga (ysuga@ysuga.net) 専用API付属 • liborochi (仮称) – C++,Java対応 – Windows,Linux対応 – 順逆運動学ライブラリ – 各関節制御 • 位置速度制御 • 速度制御 • 電流制御 – サンプルプログラム添付 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 8
  • 9. Yuki Suga (ysuga@ysuga.net) 対応RTコンポーネント付属 • 共通インターフェース仕様書 – “コンポーネントの相互接続性や相互運用性を確保” – http://openrtm.org/openrtm/ja/project/Recommendation_CommonIF – 移動ロボット – コミュニケーション機能 – ロボットアーム – 双腕ロボット – 作業系画像認識 – カメラ機能 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 9
  • 10. Yuki Suga (ysuga@ysuga.net) ロボットアーム制御機能 共通インターフェース • ロボットアーム制御機能共通インターフェース仕様書(第1.0版) – “本仕様書では、6自由度あるいは7自由度を有するマニピュレータ及び その先端にエンドエフェクタとして1軸グリッパを取り付けたロボットアー ムを制御するための共通インタフェース(ACT インタフェース)を規定” – 座標系,データ型,単位,インターフェース(関数名)を規定 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 10
  • 11. Yuki Suga (ysuga@ysuga.net) インターフェースのレベル • 低レベル – 関節単位の位置を直接指令 • 中レベル – 関節座標空間における直線補完 (PTP制御) – 直交座標空間における直線補完 (CP制御) • 高レベル – JOB実行を行うインターフェース 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 11
  • 12. Yuki Suga (ysuga@ysuga.net) 低レベルインターフェース • 共通インターフェース – 「ManiplatorCommonInterface_Common」 • 各関節位置フィードバック情報 • 関節ユニットの状態取得 • サーボON/OFF • 位置指令 • 位置フィードバック 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 12
  • 13. Yuki Suga (ysuga@ysuga.net) 中レベルインターフェース • 共通インターフェース – 「ManiplatorCommonInterface_Common」 • 中レベル共通インターフェース – 「ManiplatorCommonIterface_Middle」 • グリッパ開閉 • 手先位置フィードバック(順運動学) • 直交座標系における直線起動での手先移動(CP制御) • 関節座標系における直線起動での手先移動(PTP制御) • 動作時の速度設定 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 13
  • 14. Yuki Suga (ysuga@ysuga.net) 中レベルインターフェースを使う • サービスポートを使わなくてはならない – サービスポートは,データの交換だけでなく,関 数を呼び出すのと同じ – 関数の宣言はIDLファイルで行う 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 14
  • 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. Yuki Suga (ysuga@ysuga.net) RTC Builder + ServicePort • Add Port – (ポートを作る) – ポートはインターフェースの出口 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 16
  • 17. Yuki Suga (ysuga@ysuga.net) RTC Builder + ServicePort • Add Interface – (インターフェースを作る) – インターフェースがクラス的なもの 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 17 インターフェース名はすべて, 下のインターフェースタイプと 同じにしておくと便利. 使う側は「Required」 Var Name はプログラム内の 変数名 IDLファイルを指定する
  • 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. 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. 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. Yuki Suga (ysuga@ysuga.net) ManipulatorCommonInterface_DataTy pe.idl (抜粋) 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 21 typedef sequence<double> JointPos; JointPos型はdoubleの配列
  • 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. 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. 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. Yuki Suga (ysuga@ysuga.net) 幸いにも • 動きをシミュレーション (Choreonoid)で確認で きる – Choreonoid.org – 専用のプラグインが必要になる 2012/7/11 ROBOTECH2012 RTミドルウエア講習会 25