ORiNとの連携によるRTMの産業機器用ハードウエアRTCの拡充/CRDプロバイダを用いたロボット固有情報のXML化による産業用ロボット汎用RTCの開発

ORiNとの連携によるRTMの産業機器用ハードウエアRTCの拡充/CRDプロバイダを用いたロボット固有情報のXML化による産業用ロボット汎用RTCの開発

投稿者: 
s10tm079@mail.s...
ORiNとの連携によるRTMの産業機器用ハードウエアRTCの拡充/CRDプロバイダを用いたロボット固有情報のXML化による産業用ロボット汎用RTCの開発

発表

  • SI2014&RTミドルウエアコンテスト2014応募作品
    「ORiNとの連携によるRTMの産業機器用ハードウエアRTCの拡充/CRDプロバイダを用いたロボット固有情報のXML化による産業用ロボット汎用RTCの開発」

概要

 RTMとORiNの連携によって産業用ロボット汎用RTCを開発し、RTMの産業機器用ハードウエアRTCを拡充した.

特徴

  • ORiNのロボットプロバイダを利用することで種々のメーカの産業用ロボットに対応
  • 産業用ロボットの固有情報をXMLファイルに記述することで、再コンパイルレスに使用する産業用ロボットの変更が可能

開発環境

  • OS:Windows7 Professional SP1
  • 開発言語:C++
  • コンパイラ:Visual Studio 2010 Professional
  • RTミドルウエア(C++):OpenRTM-aist-1.1.0-RELEASE
  • RTミドルウエア(Python):OpenRTM-aist-1.1.0-RC1
    • rtshell-3.1.0に利用
  • ORiN2 SDK ver2.1.17



コンポーネント群

  • 再利用
    • PartialEdge:USBカメラで物体の部分的な曲線を検出し,その物体の図心位置(単位:pixel)を出力(株式会社東芝製)
    • PartialEdgeConsumer:PartialEdgeのテスト用(株式会社東芝製)
    • DIOInterfaceModuleRTC:株式会社インタフェース製デジタルI/Oインタフェースモジュール「PCI-2826CV」を制御(埼玉大学製)
    • TimeBooleanSeqOutRTC:コンフィギュレーション上で入力された10進数の数値を2進数に変換しTimedBooleanSeq形式で出力(埼玉大学製)
    • OperationCommandRTC:ロボットアーム共通I/F(SI単位系準拠 第1.0版)の低・中レベル共通コマンドと中レベルモーションコマンドを送信(埼玉大学製)
  • 新規開発
    • RTM_ORiN_Converter_CRD:ORiNのCRDプロバイダを用いた産業用ロボット汎用RTC
      ※本RTCの実行には、株式会社デンソーウェーブから販売されているORiN2 SDKのORiNランタイムカーネルライセンスの購入が必要になります.
    • CameraPositionCorrectionRTC:PartialEdgeから出力されたワークの図心位置を基準位置からの変位に変換して出力
    • IntegratedControlRTC:システムの入力情報を統括し,ロボットへの指令値を出力

ダウンロード

XML Sampleファイルのダウンロードはこちらから(2015/08/06更新)
zipファイル(ver 1.1)のダウンロードはこちらから(2014/11/21更新)
zipファイル(ver 1.0)のダウンロードはこちらから(2014/10/24更新)
  • ドキュメント
    • 産業用ロボット汎用RTC 操作マニュアル_ver_1_1.pdf
    • ORiNとの連携によるRTMの産業機器用ハードウエアRTCの拡充_解説ドキュメント_ver_1_1.pdf
    • ORiNとの連携によるRTMの産業機器用ハードウエアRTCの拡充_操作マニュアル_ver_1_1.pdf
    • ORiNとの連携によるRTMの産業機器用ハードウエアRTCの拡充_導入マニュアル_ver_1_1.pdf
  • ソフトウエア
    • ソースファイル
    • バイナリファイル
    • スクリプトファイル
  • ムービー
    • 動作検証実験動画(DENSO製ロボット).mp4
    • 動作検証実験動画(YAMAHA製ロボット).mp4

ライセンス

  • 本ソフトはMITライセンスのもとで公開されています.ダウンロードしたフォルダ内のLICENSE.txtをお読みください.
  • また,著作権は埼玉大学設計工学研究室が保有しています.

謝辞

 本研究は,独立行政法人新エネルギー・産業技術総合開発機構「NEDOプロジェクトを核とした人材育成,産学連携等の総合的展開/RTミドルウェアの実践的展開/RTMによる人材育成・産学提携の社会実装者を核とした総合的研究開発」の支援によって得られた成果です.記して感謝の意を表します.
 独立行政法人東京都立産業技術研究センター ロボット開発セクター長 坂下和広 様をはじめ東京都立産業技術研究センターの皆様には多大なるご協力をいただきました.ここに感謝の意を表します.
 株式会社デンソーウェーブ 犬飼利宏 様にも,本研究にあたって,様々なご意見をいただきました.感謝致します.

連絡先

問合先(メールアドレス): 
openrtm<at>design.mech.saitama-u.ac.jp
Resources
Project Information
OS: 
Windows
言語: 
C++
OpenRTM ver.: 
1.1
Average: 
5
Average: 5 (1 vote)
最終更新日時: 
木, 2015-08-06 13:46

コメント

投稿者: 
ORiN2 SDKがないのでソースコードを読んでみたのですが以下の点が気になりました。
  • ManipulatorCommonInterface_MiddleLevelSVC_impl.cppのmoveLinearCartesianAbs,moveLinearCartesianRel,movePTPCartesianAbs等でVariantInit(&variant_pose);~ORiNDeactivate();は同じようなコードを書いてあるので関数にまとめた方がソースコードが読みやすくなるのではないか?
  • pSPEED,pVar,pEng等グローバル変数を多用しているのが少し気になる

とても使えそうなRTCだと思いますし、マニュアルが詳しく書いてあるのが良いと思います。

Miyamoto Nobuhiko様

埼玉大学の藤間です。
コメントをいただき、ありがとうございます。
まず、moveLinearCartesianAbs,moveLinearCartesianRel,movePTPCartesianAbs等でのコードの重複部分についてですが、
ご指摘いただいた通り、関数としてまとめたものを次のバージョンで公開させていただきたいと思います。

次に、pSPEED、pVar、pEng等の部分ですが、ORiNを利用するために必要な変数としてまとめて定義を行う方がわかりやすいと考え、
グローバル変数で定義しております。良い方法がございましたらご教授いただけると幸いです。

以上、よろしくお願い致します。
投稿者: 

返信ありがとうございます。

useORiN.cppで定義した変数、関数をクラスにまとめてRTM_ORiN_Converter_CRDのm_ManipulatorCommonInterface_Common、m_ManipulatorCommonInterface_Middleの初期化時に引数で渡せばグローバル変数を多用せずに済むとは思います。 まあどちらの方が良いかはわかりませんけど。

それからついでなので他に気になったことを書いておきます。

  • 産業用ロボット汎用RTC 操作マニュアル_ver_1_0.pdfの11ページでuseORiN.cppとdefcommand.cppをプロジェクト作成後に追加していますが、あらかじめsrc\CMakeLists.txtのset(comp_srcs ~の部分にファイル名を記述しておけば追加できると思います。
  • 産業用ロボットはよくわからないので初歩的な事を聞いてしまうようですが、逆運動学などは解説ドキュメント20ページのRobot Controllerで自動的に計算してくれるものなのですか?
  • JHomePoint等の配列の数はどのように決めているのでしょうか?
  • moveCircularCartesianRelで現在位置からの相対的な目標位置をCPointR[i]=CPointR[i]+iArray[i]のようにして絶対位置に変換後sprintf(char_buffer,M31_Command~としているので最終的に絶対位置で入力していると思うのですが、何故そのままM32_Commandとして相対位置で入力するようにしないのでしょうか?また絶対位置で入力するのならばif((strcmp(M32_Command,"NOT_IMPLEMENTED") == 0)の部分がM31ではなく何故M32を判定するのでしょうか?
Miyamoto Nobuhiko様

埼玉大学の藤間です。
先日、ご指摘いただいた
・コード重複部分の関数化
・useORiN.cppとdefcommand.cppのCMakeListへの追加
を修正したバージョンを公開させていただきました。
また、useORiN.cppで定義した変数、関数をクラスにまとめる方法ですが、上手く実装できなかったため
今回はグローバル変数を使用する方法をとらせていただきたいと思います。

続いて、ご質問の件についてご回答致します。
1つ目の産業用ロボットの逆運動学ですが、Robot Controllerで自動的に計算されます。

2つ目のJHomePoint等の配列の数ですが、ロボットアーム共通インターフェース仕様書
(SI単位系準拠 第1.0版)で対象としている最大の軸数が7軸であるため、それに合わせて
指定しております。

3つ目のmoveCircularCartesianRelの件ですが、相対位置を絶対位置に変換しているのは、
ORiNでの動作指令に相対位置での円弧補間動作が定義されていないためです。
M31_CommandではなくM32_Commandで判定を行っているのは、絶対位置指定と相対位置指定で
別々にNOT_IMPLEMENTEDを定義できるようにするためです。

以上、よろしくお願い致します。

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

Webサイト統計
ユーザ数:2160
プロジェクト統計
RTコンポーネント307
RTミドルウエア35
ツール22
文書・仕様書2

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク