<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ysuga.net</title>
	<atom:link href="http://ysuga.net/feed" rel="self" type="application/rss+xml" />
	<link>http://ysuga.net</link>
	<description>This page is my hobby page! Robots, Inline skates, Rugby, and more!!</description>
	<lastBuildDate>Tue, 07 Feb 2012 06:58:40 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Roombaをプログラミング「libRoomba」</title>
		<link>http://ysuga.net/robot/etc/libroomba</link>
		<comments>http://ysuga.net/robot/etc/libroomba#comments</comments>
		<pubDate>Thu, 19 Jan 2012 14:17:37 +0000</pubDate>
		<dc:creator>ysuga</dc:creator>
				<category><![CDATA[徒然]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[iRobot]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[MacOS]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[Python]]></category>
		<category><![CDATA[robot]]></category>
		<category><![CDATA[Roomba]]></category>
		<category><![CDATA[Windows]]></category>

		<guid isPermaLink="false">http://ysuga.net/?p=1239</guid>
		<description><![CDATA[iRobot社製ロボット掃除機「Roomba」を利用するためのソフトウエアライブラリです． iRobot社製のRoombaをプログラムするためのライブラリです． Roombaを動かすためのOpenInterfaceに対応しています． Roomba Open Interface [PDF] RoombaとPCをUARTで接続する必要があります． たとえば，秋月電子のFT232シリアルUSB変換モジュールなどがよいでしょう． 結線の仕方は上記のマニュアルに書いてありますが，基本的にTX，RX，GNDをつなぐだけです． ちなみに僕はOriental Roboticsさんの「Frisk Roomba」を使っています．まだ販売してると思います． http://www.oriental-robotics.com/ これだと，天板をひっぺがして，Friskを指すだけです．スッキリしてますし，無線で試せます． いずれはコンピュータを積むので，有線にするかもしれませんが，かなりすっきりと使えます． PCとつないてlibRoombaでプログラム書けば，ツイッターと連携して遠隔お掃除とかも簡単でしょうね． ダウンロード 対応ロボット： iRobot社 Roomba 500シリーズ（動作確認はRoomba 530で行っています） 対応OS：Windows 7　（Linux，MacOSも予定） 対応言語： C/C++, python（pythonラッパーで対応予定） 依存ライブラリ：なし 最新のソースコード Github: http://github.com/ysuga/libRoomba インストーラ インストーラ: libRoombaSetup1.0 ソースコードからインストール VS2008でソリューションファイルをビルドします． demoプロジェクトを実行すると，libRoombaの使い方がわかると思います． インストーラでインストール MSIインストーラからインストールします． インストールしたフォルダはLIBROOMBA_ROOTという環境変数が自動的に登録されますので，これを使うこともできます． インストールしたフォルダは以下のようになっています． include ・・・　ヘッダーファイル bin ・・・ dllとデモ用プログラム lib ・・・ ライブラリファイル doc ・・・ ドキュメント example ・・・ [...]]]></description>
			<content:encoded><![CDATA[<p>iRobot社製ロボット掃除機「Roomba」を利用するためのソフトウエアライブラリです．</p>
<p><div class='postTabs_divs postTabs_curr_div' id='postTabs_0_1239'>
<span class='postTabs_titles'><b>概要</b></span><br />
iRobot社製のRoombaをプログラムするためのライブラリです．<br />
Roombaを動かすためのOpenInterfaceに対応しています．<br />
<a href="http://www.irobot.lv/uploaded_files/File/iRobot_Roomba_500_Open_Interface_Spec.pdf">Roomba Open Interface [PDF]</a></p>
<p>RoombaとPCをUARTで接続する必要があります．<br />
たとえば，<a href="http://akizukidenshi.com/catalog/g/gK-01977/">秋月電子のFT232シリアルUSB変換モジュール</a>などがよいでしょう．<br />
結線の仕方は上記のマニュアルに書いてありますが，基本的にTX，RX，GNDをつなぐだけです．</p>
<p>ちなみに僕はOriental Roboticsさんの「Frisk Roomba」を使っています．まだ販売してると思います．<br />
<a href="http://www.oriental-robotics.com/">http://www.oriental-robotics.com/</a><br />
これだと，天板をひっぺがして，Friskを指すだけです．スッキリしてますし，無線で試せます．</p>
<p>いずれはコンピュータを積むので，有線にするかもしれませんが，かなりすっきりと使えます．<br />
PCとつないてlibRoombaでプログラム書けば，ツイッターと連携して遠隔お掃除とかも簡単でしょうね．</p>
<p></div>

<div class='postTabs_divs' id='postTabs_1_1239'>
<span class='postTabs_titles'><b>ダウンロード</b></span></p>
<h1>ダウンロード</h1>
<p>対応ロボット： iRobot社 Roomba 500シリーズ（動作確認はRoomba 530で行っています）<br />
対応OS：Windows 7　（Linux，MacOSも予定）<br />
対応言語： C/C++, python（pythonラッパーで対応予定）<br />
依存ライブラリ：なし</p>
<h1>最新のソースコード</h1>
<p>Github: <a href="http://github.com/ysuga/libRoomba">http://github.com/ysuga/libRoomba</a></p>
<h1>インストーラ</h1>
<p>インストーラ: <a href='http://ysuga.net/wp-content/uploads/2012/01/libRoombaSetup1.0.zip'>libRoombaSetup1.0</a></p>
<p></div>

<div class='postTabs_divs' id='postTabs_2_1239'>
<span class='postTabs_titles'><b>使い方</b></span></p>
<h1>ソースコードからインストール</h1>
<p>VS2008でソリューションファイルをビルドします．<br />
demoプロジェクトを実行すると，libRoombaの使い方がわかると思います．</p>
<h1>インストーラでインストール</h1>
<p>MSIインストーラからインストールします．<br />
インストールしたフォルダはLIBROOMBA_ROOTという環境変数が自動的に登録されますので，これを使うこともできます．</p>
<p>インストールしたフォルダは以下のようになっています．<br />
include ・・・　ヘッダーファイル<br />
bin ・・・ dllとデモ用プログラム<br />
lib ・・・ ライブラリファイル<br />
doc ・・・ ドキュメント<br />
example ・・・ デモ用プログラムのプロジェクト</p>
<h1>クラスリファレンス</h1>
<p>インストーラに含まれています．ウェブからご覧になりたい方はこちらです．<br />
<a href="http://ysuga.net/doc/libroomba/html/">http://ysuga.net/doc/libroomba/html/</a></p>
<p></div>

</p>
<script type='text/javascript'>jQuery(document).ready(function() { if(postTabs_getCookie('postTabs_1239')) postTabs_show(postTabs_getCookie('postTabs_1239'),1239); });</script>]]></content:encoded>
			<wfw:commentRss>http://ysuga.net/robot/etc/libroomba/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RTMコンテスト2011に出た直後の感想</title>
		<link>http://ysuga.net/robot/etc/1230</link>
		<comments>http://ysuga.net/robot/etc/1230#comments</comments>
		<pubDate>Fri, 23 Dec 2011 15:52:36 +0000</pubDate>
		<dc:creator>ysuga</dc:creator>
				<category><![CDATA[徒然]]></category>

		<guid isPermaLink="false">http://ysuga.net/?p=1230</guid>
		<description><![CDATA[どうも．今年もRTMコンテストに参加してきました．結果は・・・まあ・・・置いときましょ． http://www.openrtm.org/openrtm/contests/2011 終わって，某大先生や先輩方と飲んで，直後の感想を書いてますので，変な文章だったり気分を害したらすみません．酔ってます． 今年のRTMコンテストの感想として，じわじわと参加者が増えていくにつれ，聴講者が増えていっており，50人くらいの教室で立ち見が出てました．60人くらい，という人もいましたが，とにかく会場が狭かった・・・(笑) 僕の周りの人でも「RTミドルウエア」という単語を聞く事が何度かあり，先日のロボット展もあったので，ここでたたみこむように何かを発して行かないと，また終息の方向にベクトルが向かっていくんだろうな，と思っています．これに対して，あくまでも外野である僕はあまりにも無力だと思っていて，すごく悔しいと思っています． 今年の僕の作品は「RTno」というもので，市販のマイコンボード「arduino」や「mbed」を使って，RTミドルウエアの実装である「OpenRTM-aist」に対応したコンポーネントを簡単に作るためのライブラリとツールです． http://www.ysuga.net/robot/rtm/rtc/rtno PC側のプログラムはLinux，Windowsで動いて，マイコンは通販で買えますし，誰にでも使ってもらえるRTCを提供したつもりです．興味があれば使ってやってください． 一応，arduino製品はいろんなお店で買えますが，この記事では「ヴィストン」さんを押しときます．RTミドルウエアコンテストに協賛して下さいました． http://www.vstone.co.jp/robotshop/index.php?main_page=index&#038;cPath=71_270 今回は，「RTミドルウエアって面白そうだけど，使えるコンポーネントが無いよね」という言葉にこたえるものを提供する，というのがテーマでした． RTnoは所詮マイコンボードなので，完成品の華麗さはないですけど，泥臭いことが好きな人もまだまだいると信じてますし，そこに興味があるソフトウエア屋さんにも，よい題材になってると思います．使ってみようという人がこれで増えればな，と思います． さて，自分のことはこれぐらいにして．．． RTコンポーネントはだんだんと増えてきています．ドキュメントもどんどん書こう，という文化が浸透し始めて，まだまだ十分とは思っていませんが，よい傾向だと思います． ただ，それぞれのコンポーネントは，やはり研究者の人たちが作っている，ということで，buggyであり，また複雑で，検証自体がまだまだ不十分だな，と思うものが多いようです． そもそも，RTコンポーネント自体のデプロイメントや，共通インターフェースが規定され切っていない時点で，5つ以上のコンポーネントが複雑に連携するようなシステムでは，それをサポートするツール等が付属していない限りは，初心者は，その分野の門外漢に使ってもらうのが難しいと考えています． さらには研究でつかっているプラットフォームや，自作のロボットを使った作品が多いようですが，どちらも入手性という点では疑問です． 買ってこれる，安いロボット．それでRTCが試せる，というのが求められていて，これもヴィストンのビュートローバなんかは可能性があるな，と思っています． http://www.vstone.co.jp/robotshop/index.php?main_page=product_info&#038;cPath=156_176&#038;products_id=2715 今の段階で必要とされているのは， １．ハードに触れるRTコンポーネント ２．ハードの入手性が極めて高いこと ３．利用しやすい工夫があること ４．マニュアルが充実していること といった段階だと思っています．アルゴリズムやサービスレベルの実装は，ロボット屋としてはもう少し先なんじゃないかな，と思っています．むろん，「中の人」は使ってますけど，普通はrtshellとか，rtc-daemonとか使いこなすのは先の話なんですよね． といった具合で，RTMコンテスト，3回出させてもらっていますが，ある程度，自分なりにテーマ設定をして参加してます． 次に進む方向としては2つあって， 1つは，これを教育方面で活用していくためのツールやテキストブックがあって，それに答えてくれたのが，埼玉大学琴坂研究室の作品 http://www.openrtm.org/openrtm/ja/project/rtm_learning この方向はどんどん進めていって，早い段階で，出来れば高校や中学でもRTMに触れるような場面が作れるといいな，と思っています． 僕のサイトもそういう狙いがあるわけで，最初は研究室の後輩のための備忘録だったわけですけど． もうひとつはハードの一つ上の層を提供するRTCがよいかな，と思います． カメラの一つ上の画像処理，なんてのはわかりやすい例ですよね．今回はインタラクションのための指差し位置推定コンポーネント，がこれに当たります． http://www.openrtm.org/openrtm/ja/project/RTMContest2011_1261 あとはアイディアとしては加速度センサやジャイロを組み合わせたセンサアレイの一つ上の層のRTC，とか，そういうハードとソフトの融合が提案できれば，次の可能性かな，と思ってます． Kinectなんてのもこのラインの製品で，既存のセンサアレイ＋ソフトウエアという組み合わせが，クリエイターを刺激するという仕組みであり，このラインはまだ可能性が残ってるし，それがRTCで出てくれば，普及の観点でもいいな，と思ってます． という感じで来年以降のアイディアを練っています．誰か面白いの見つけたら，形にして来年のRTMコンテストに出して下さい．やるらしいですよ，来年も． こういうのがRTMコンテストで出てくれば，よい賞をあげたいな，と思っていますし，RTM普及やビジネスへの発展もあるんじゃないかな，とも思います． あまりハードから乖離してたり，試すためにRTCを5個以上使うのは，僕はちょっと萎えますし，ハードが手に入らないテーマや自作するのに時間がかかるテーマはなかなか審査する方も辛いっす． とにかく，楽しい雰囲気で気持ちよく発表させてもらえたので，この場を用意して下さったRTMコンテスト実行委員会のみなさん，SI部門のみなさん，みんなに感謝してます．ありがとうございました． 来年は味噌っかす扱いらしいので，自分が作りたかったもので応募しようかな，と思ってたり．]]></description>
			<content:encoded><![CDATA[<p>どうも．今年もRTMコンテストに参加してきました．結果は・・・まあ・・・置いときましょ．<br />
<a href="http://www.openrtm.org/openrtm/contests/2011">http://www.openrtm.org/openrtm/contests/2011</a><br />
終わって，某大先生や先輩方と飲んで，直後の感想を書いてますので，変な文章だったり気分を害したらすみません．酔ってます．</p>
<p>今年のRTMコンテストの感想として，じわじわと参加者が増えていくにつれ，聴講者が増えていっており，50人くらいの教室で立ち見が出てました．60人くらい，という人もいましたが，とにかく会場が狭かった・・・(笑)<br />
僕の周りの人でも「RTミドルウエア」という単語を聞く事が何度かあり，先日のロボット展もあったので，ここでたたみこむように何かを発して行かないと，また終息の方向にベクトルが向かっていくんだろうな，と思っています．これに対して，あくまでも外野である僕はあまりにも無力だと思っていて，すごく悔しいと思っています．</p>
<p>今年の僕の作品は「RTno」というもので，市販のマイコンボード「arduino」や「mbed」を使って，RTミドルウエアの実装である「OpenRTM-aist」に対応したコンポーネントを簡単に作るためのライブラリとツールです．<br />
<a href="http://www.ysuga.net/robot/rtm/rtc/rtno">http://www.ysuga.net/robot/rtm/rtc/rtno</a><br />
PC側のプログラムはLinux，Windowsで動いて，マイコンは通販で買えますし，誰にでも使ってもらえるRTCを提供したつもりです．興味があれば使ってやってください．<br />
一応，arduino製品はいろんなお店で買えますが，この記事では「ヴィストン」さんを押しときます．RTミドルウエアコンテストに協賛して下さいました．<br />
<a href="http://www.vstone.co.jp/robotshop/index.php?main_page=index&#038;cPath=71_270">http://www.vstone.co.jp/robotshop/index.php?main_page=index&#038;cPath=71_270</a></p>
<p>今回は，「RTミドルウエアって面白そうだけど，使えるコンポーネントが無いよね」という言葉にこたえるものを提供する，というのがテーマでした．<br />
RTnoは所詮マイコンボードなので，完成品の華麗さはないですけど，泥臭いことが好きな人もまだまだいると信じてますし，そこに興味があるソフトウエア屋さんにも，よい題材になってると思います．使ってみようという人がこれで増えればな，と思います．</p>
<p>さて，自分のことはこれぐらいにして．．．</p>
<p>RTコンポーネントはだんだんと増えてきています．ドキュメントもどんどん書こう，という文化が浸透し始めて，まだまだ十分とは思っていませんが，よい傾向だと思います．<br />
ただ，それぞれのコンポーネントは，やはり研究者の人たちが作っている，ということで，buggyであり，また複雑で，検証自体がまだまだ不十分だな，と思うものが多いようです．<br />
そもそも，RTコンポーネント自体のデプロイメントや，共通インターフェースが規定され切っていない時点で，5つ以上のコンポーネントが複雑に連携するようなシステムでは，それをサポートするツール等が付属していない限りは，初心者は，その分野の門外漢に使ってもらうのが難しいと考えています．</p>
<p>さらには研究でつかっているプラットフォームや，自作のロボットを使った作品が多いようですが，どちらも入手性という点では疑問です．<br />
買ってこれる，安いロボット．それでRTCが試せる，というのが求められていて，これもヴィストンのビュートローバなんかは可能性があるな，と思っています．<br />
<a href="http://www.vstone.co.jp/robotshop/index.php?main_page=product_info&#038;cPath=156_176&#038;products_id=2715">http://www.vstone.co.jp/robotshop/index.php?main_page=product_info&#038;cPath=156_176&#038;products_id=2715</a></p>
<p>今の段階で必要とされているのは，<br />
１．ハードに触れるRTコンポーネント<br />
２．ハードの入手性が極めて高いこと<br />
３．利用しやすい工夫があること<br />
４．マニュアルが充実していること<br />
といった段階だと思っています．アルゴリズムやサービスレベルの実装は，ロボット屋としてはもう少し先なんじゃないかな，と思っています．むろん，「中の人」は使ってますけど，普通はrtshellとか，rtc-daemonとか使いこなすのは先の話なんですよね．</p>
<p>といった具合で，RTMコンテスト，3回出させてもらっていますが，ある程度，自分なりにテーマ設定をして参加してます．</p>
<p>次に進む方向としては2つあって，<br />
1つは，これを教育方面で活用していくためのツールやテキストブックがあって，それに答えてくれたのが，埼玉大学琴坂研究室の作品<br />
<a href="http://www.openrtm.org/openrtm/ja/project/rtm_learning">http://www.openrtm.org/openrtm/ja/project/rtm_learning</a><br />
この方向はどんどん進めていって，早い段階で，出来れば高校や中学でもRTMに触れるような場面が作れるといいな，と思っています．<br />
僕のサイトもそういう狙いがあるわけで，最初は研究室の後輩のための備忘録だったわけですけど．</p>
<p>もうひとつはハードの一つ上の層を提供するRTCがよいかな，と思います．<br />
カメラの一つ上の画像処理，なんてのはわかりやすい例ですよね．今回はインタラクションのための指差し位置推定コンポーネント，がこれに当たります．<br />
<a href="http://www.openrtm.org/openrtm/ja/project/RTMContest2011_1261">http://www.openrtm.org/openrtm/ja/project/RTMContest2011_1261</a><br />
あとはアイディアとしては加速度センサやジャイロを組み合わせたセンサアレイの一つ上の層のRTC，とか，そういうハードとソフトの融合が提案できれば，次の可能性かな，と思ってます．<br />
Kinectなんてのもこのラインの製品で，既存のセンサアレイ＋ソフトウエアという組み合わせが，クリエイターを刺激するという仕組みであり，このラインはまだ可能性が残ってるし，それがRTCで出てくれば，普及の観点でもいいな，と思ってます．</p>
<p>という感じで来年以降のアイディアを練っています．誰か面白いの見つけたら，形にして来年のRTMコンテストに出して下さい．やるらしいですよ，来年も．</p>
<p>こういうのがRTMコンテストで出てくれば，よい賞をあげたいな，と思っていますし，RTM普及やビジネスへの発展もあるんじゃないかな，とも思います．</p>
<p>あまりハードから乖離してたり，試すためにRTCを5個以上使うのは，僕はちょっと萎えますし，ハードが手に入らないテーマや自作するのに時間がかかるテーマはなかなか審査する方も辛いっす．</p>
<p>とにかく，楽しい雰囲気で気持ちよく発表させてもらえたので，この場を用意して下さったRTMコンテスト実行委員会のみなさん，SI部門のみなさん，みんなに感謝してます．ありがとうございました．</p>
<p>来年は味噌っかす扱いらしいので，自分が作りたかったもので応募しようかな，と思ってたり．</p>
]]></content:encoded>
			<wfw:commentRss>http://ysuga.net/robot/etc/1230/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iREX2011におけるRTM関連の展示について雑感</title>
		<link>http://ysuga.net/robot/etc/1135</link>
		<comments>http://ysuga.net/robot/etc/1135#comments</comments>
		<pubDate>Mon, 14 Nov 2011 06:48:52 +0000</pubDate>
		<dc:creator>ysuga</dc:creator>
				<category><![CDATA[徒然]]></category>

		<guid isPermaLink="false">http://ysuga.net/?p=1135</guid>
		<description><![CDATA[どうも．ysugaです． 国際ロボット展が行われて，僕も最終日にようやくNEDOのブースのRTミドルウエア関連の展示を見ることが出来ましたが，いろいろと突っ込むところが合って，まとめて書くにはTwitterやFacebookは狭いので，こちらに書くことにしました． ソフトウエアは展示するのは難しい あの場所に来られる方は，多くは動くモノを見に来ているので，かなりソフトウエアのアドバンテージを示すのは難しかったと思います．画像処理を行って，ロバストに把持戦略を行うマニピュレータという意味では，FANUCのロボットなどには負けてます．単純にパフォーマンスだけで比べたらダメっす． ですので，RTMなりに何がすごいのか，をプレゼンするのが大事な場所で，それについてはプレゼンターの方々はわかっていらしたと思います． 今回の展示について そもそも，あのNEDOブースでのRTミドルウエア関連の展示は，何が目的だったのか良く解りませんでしたね．ひろく一般にNEDOの仕事を理解してもらって，次回の仕分けの対策にするんでしょうか？それならそれなりのプレゼンがあったと思いますよ． また，RTミドルウエアのユーザを増やしたかったんですかね？それにしてはRTミドルウエアのユーザ視点でのアドバンテージについて良く解りませんでした．メーカー視点であってもそうです．その辺の目的意識はあったのでしょうか？ 今回の大阪大学や豊橋技科大のプレゼンテーションでは，コンポーネントの代替という部分についての話が取り上げられていたと思います． つまり，同一機能を有する異なるハードウエアやソフトウエアを入れ替えることができる，という機能です． この部分は，豊橋技科大では，位置を検出するセンサをステレオカメラにするか，デプスセンサ（スイスレンジャーとか）にするか，というプレゼンで，大阪大では，画像処理のアルゴリズムを入れ替えて使っていました． 正直，この部分は，聞いている人に良く伝わっていなかったと思います．これが出来て，何が嬉しいのか．そういうプレゼンがありませんでした．これは，正直失敗だったと思います． （ほぼ）静態展示だった他の作品なども，やはりソフトウエアがすごい，というプレゼンにはなっていなかったと思います． RTミドルウエアのアドバンテージ RTミドルウエアのアドバンテージを考えると， オープンで，フリーで無償で使える 対応製品の試用までのハードルが低い コンポーネントの代替が可能 などが考えられますね． 今回のプレゼンでは，代替可能という部分にフォーカスがあったようですが，それがどの程度のアドバンテージになるのかをもう少し上手く説明してほしかった． たとえば，共通仕様とすることによる新規事業者の参入障壁の低減や，製品の代替によるシステムのサステイナビリティの担保といった視点で話をすべきだったと思います．誰にとって，どんなふうに嬉しいのか．そういう話があるべきですが，それがプレゼン中に一言だけ触れられているだけ，というのは日本人にありがちなプレゼンの仕方で下手だと思います． 僕なら，10分あれば，6分はこの説明に時間を割いて，具体例などを交えて，いかにRTMを使うとハッピーになるかを説き，残り二分くらいでデモします．興味を持ってもらうには，別にやって見せるという部分はほとんど要りませんよ． 今必要なのは問題意識の共有 問題なのは問題意識の共有部分だと思いますね．ソフトウエアに限らず，各社，勝手な仕様で作って行って，グローバルに展開する際に独自仕様という部分が参入障壁になり得るという事をもう少し多く話してほしかった．今は「ガラパゴス」という便利な言葉もありますからね． 僕個人としてはガラパゴスは単純に悪とは思っていません．たとえばケータイですが，今はandroid使ってますが，次はガラパゴスケータイにしようと思っています．日本の厳しいユーザの視点で作られた独自仕様は，非常に安定していて，満足度が高いです． では何が悪いのか．それは，仕様が表に出てこない事に加えて，ベンダーロックインを狙うばかりに，ユーザにとっては使いにくいものになっている点です．ユーザは選択肢が多い方に流れると思います．日本の工業用のロボット製品はほとんどがこういう仕様になっています．各社が自社の加工機械やネットワーク機器，制御機器を使ってもらうために独自規格，独自言語でのプログラミングを強要しています．もちろん，サードパーティからブリッジと呼ばれる変換機器を介して，別の通信規格を使うこともできますが，通信のリアルタイム性が損なわれたり，双方向性すら担保されない製品もあり，やはり使いにくいのが現状です．今回のiREXでは，僕も展示側に居たのと，普段お世話になっている方々とのコミュニケーションに時間を使ったので，あまり工業製品側のセクションを見れなかったのが残念です． また，研究関連のみでなく，日本のロボット関連機器のソフトウエアは非常に貧弱です．普段，僕が扱っているのはすべて海外製品です．一人多国籍軍です．海外製品には，細かい仕様だけでなく，簡単に使い始められるソフトウエアがあり，また，他のソフトウエアと繋げるためのインターフェースがあります．さらに気のきいたものでは，独自のミドルウエアが用意されていて，多数の言語やＯＳを選んで使うことができ，ネットワークに対応していて遠隔操作が簡単にできるようなものもあります．日本でこのレベルに達している機器がいくつあるでしょうか・・・ つまり，これくらいソフトウエアに力を注がなければ，海外では製品として売れないのです． なんでこうなったのか 一つは日本の人間が，形が無いものに対する価値を認められなかった点にあると思います．マニュアルやソフトウエアに関して，それがお金を払う価値があるもので，製品の一部であるという認識が欠落しています．オマケ程度にしか見ていないのです． もちろんソフトウエアを扱う会社はこの限りではありませんが，ロボットという事に関して言えば，モノがありき，なのは仕方ありません．ただ，モノを作っている会社に，この意識があるのかどうか，はなはだ疑問です． 買う側にも問題があります．こういうソフトウエアやサービスについて，価値を認める仕組みになっていますか？単純に相見積もりする際に，ソフトウエアやサービスで比べることって出来てますかね？モノがあって，サービスは二の次なのが現状だと思います． でも，作る側，とくに海外に製品を出そうと思っている人がこう思っていてはダメです．製品にはそれに付帯するソフトウエアやマニュアルを含めた，「サービス」が含まれています．この辺をどれだけの人が理解できているでしょうか． 開発資金が無い，というのは非常にツライ意見ですが，ハードは90点，ソフトは30点という製品Aと，ハードは70点，ソフトも70点という製品Bなら，製品Bを選ぶのがこれからの潮流になると思います．前者を選ぶのは骨董品の考えをしている人かエキスパートかどちらかです．ハードウエアの70点を90点にするコストと，30点のソフトウエアを70点にするコストは，どう考えてもソフトのコストの方が低くなります．まずはそういう仕事が出来る若いエンジニアを雇ってください． どういうソフトウエアがいいのか では，どうしたらいいのでしょうか．まずは，どういうソフトウエアがウケるのか，についてまとめます． 一言で言うなら，噛めば噛むほど味が出るソフトウエアです． まず，その日のうちに動かすことができるソフトウエアが必要です． 出来れば15分．なるべくなら一日で，ロボット製品の動作の確認ができること． 次に，一週間くらいで，自分自身のプログラムを作成できるようにする工夫です． これはAPIを単純に用意するのだけではなく，それを使ってデモプログラムを作るための環境設定方法などをまとめたチュートリアルです． 最後に，使いこなしてきた時に参照できるAPIのリストです． このレベルのユーザの要求は多岐にわたるので，周到な用意が必要になりますが，いちばん簡単なのはすべてオープンにすることでしょうか．APIがアウトプットする際に使うさまざまな付加機能が邪魔になることがありますから，これらを取り除くことすら彼らは要求します．このレベルのユーザは，自身で開発することのリスクも十分に理解したユーザですから，デベロッパは渡り合いやすい相手だと思います． とにかく，3・4日，時には一週間以上，スペックシートとにらめっこして本体が動かない，というのはストレスです．ユーザにとってもそうですし，そのユーザの上司が先にパンクしますwww．良く解ってない人ならなおさら，というわけです． RTミドルウエアが解になり得るか どちらかといえばこの答えはNOです．単純にRTCに対応させただけでは，このようなソフトウエアにはなりません． ただ，上記の枠組みを提供する方法の一つになり得ると考えています．つまり上記の枠組みになぞらえてRTCを使えば，この答えはYESになります． 私がこれまで考えたシナリオだと，こうなります． まず，ユーザにRTCをサンプルとして提供します．RTCはこれまで提供していたAPIをラップした，単純なもので良いです．機能のすべてをRTCのレベルでアクセス出来る必要はありません．また，そのRTCを使ったサンプルプログラムを提供します．これらはインストーラでインストールが出来，単一のexeファイルやbatファイルなどから起動が出来るようにします．決して，ユーザにRT System Editorを使わせてはなりません．下手です． これで最初の関門をクリアさせます． 次の関門では，RTCを再利用してもらいます．この辺はRTCを自身で作る作業が必要になってしまいますが，いずれRTミドルウエアのような仕組みを使うことがロボットを作ることと同義になるのは間違いありませんから気にしてはいけません(笑) 最後の難関ではユーザが直接APIに触れます．このレベルでは隠された機能が解放されます． APIを使ったデバイスの初期化や終了処理の例としてRTCは最適です．RTCのソースコードをユーザにサンプルとして提供することで，どの部分が初期化なのか，エラー処理なのか．どのAPIでデータを取得できるのか．それがわかるはずです． [...]]]></description>
			<content:encoded><![CDATA[<p>どうも．ysugaです．</p>
<p>国際ロボット展が行われて，僕も最終日にようやくNEDOのブースのRTミドルウエア関連の展示を見ることが出来ましたが，いろいろと突っ込むところが合って，まとめて書くにはTwitterやFacebookは狭いので，こちらに書くことにしました．</p>
<p><H1>ソフトウエアは展示するのは難しい</H1><br />
あの場所に来られる方は，多くは動くモノを見に来ているので，かなりソフトウエアのアドバンテージを示すのは難しかったと思います．画像処理を行って，ロバストに把持戦略を行うマニピュレータという意味では，FANUCのロボットなどには負けてます．単純にパフォーマンスだけで比べたらダメっす．</p>
<p>ですので，RTMなりに何がすごいのか，をプレゼンするのが大事な場所で，それについてはプレゼンターの方々はわかっていらしたと思います．</p>
<h1>今回の展示について</h1>
<p>そもそも，あのNEDOブースでのRTミドルウエア関連の展示は，何が目的だったのか良く解りませんでしたね．ひろく一般にNEDOの仕事を理解してもらって，次回の仕分けの対策にするんでしょうか？それならそれなりのプレゼンがあったと思いますよ．<br />
また，RTミドルウエアのユーザを増やしたかったんですかね？それにしてはRTミドルウエアのユーザ視点でのアドバンテージについて良く解りませんでした．メーカー視点であってもそうです．その辺の目的意識はあったのでしょうか？</p>
<p>今回の大阪大学や豊橋技科大のプレゼンテーションでは，コンポーネントの代替という部分についての話が取り上げられていたと思います．</p>
<p>つまり，同一機能を有する異なるハードウエアやソフトウエアを入れ替えることができる，という機能です．</p>
<p>この部分は，豊橋技科大では，位置を検出するセンサをステレオカメラにするか，デプスセンサ（スイスレンジャーとか）にするか，というプレゼンで，大阪大では，画像処理のアルゴリズムを入れ替えて使っていました．</p>
<p>正直，この部分は，聞いている人に良く伝わっていなかったと思います．これが出来て，何が嬉しいのか．そういうプレゼンがありませんでした．これは，正直失敗だったと思います．</p>
<p>（ほぼ）静態展示だった他の作品なども，やはりソフトウエアがすごい，というプレゼンにはなっていなかったと思います．</p>
<h1>RTミドルウエアのアドバンテージ</h1>
<p>RTミドルウエアのアドバンテージを考えると，</p>
<ul>
<li>オープンで，フリーで無償で使える</li>
<li>対応製品の試用までのハードルが低い</li>
<li>コンポーネントの代替が可能</li>
</ul>
<p>などが考えられますね．<br />
今回のプレゼンでは，代替可能という部分にフォーカスがあったようですが，それがどの程度のアドバンテージになるのかをもう少し上手く説明してほしかった．</p>
<p>たとえば，共通仕様とすることによる新規事業者の参入障壁の低減や，製品の代替によるシステムのサステイナビリティの担保といった視点で話をすべきだったと思います．誰にとって，どんなふうに嬉しいのか．そういう話があるべきですが，それがプレゼン中に一言だけ触れられているだけ，というのは日本人にありがちなプレゼンの仕方で下手だと思います．</p>
<p>僕なら，10分あれば，6分はこの説明に時間を割いて，具体例などを交えて，いかにRTMを使うとハッピーになるかを説き，残り二分くらいでデモします．興味を持ってもらうには，別にやって見せるという部分はほとんど要りませんよ．</p>
<h1>今必要なのは問題意識の共有</h1>
<p>問題なのは問題意識の共有部分だと思いますね．ソフトウエアに限らず，各社，勝手な仕様で作って行って，グローバルに展開する際に独自仕様という部分が参入障壁になり得るという事をもう少し多く話してほしかった．今は「ガラパゴス」という便利な言葉もありますからね．</p>
<p>僕個人としてはガラパゴスは単純に悪とは思っていません．たとえばケータイですが，今はandroid使ってますが，次はガラパゴスケータイにしようと思っています．日本の厳しいユーザの視点で作られた独自仕様は，非常に安定していて，満足度が高いです．</p>
<p>では何が悪いのか．それは，仕様が表に出てこない事に加えて，ベンダーロックインを狙うばかりに，ユーザにとっては使いにくいものになっている点です．ユーザは選択肢が多い方に流れると思います．日本の工業用のロボット製品はほとんどがこういう仕様になっています．各社が自社の加工機械やネットワーク機器，制御機器を使ってもらうために独自規格，独自言語でのプログラミングを強要しています．もちろん，サードパーティからブリッジと呼ばれる変換機器を介して，別の通信規格を使うこともできますが，通信のリアルタイム性が損なわれたり，双方向性すら担保されない製品もあり，やはり使いにくいのが現状です．今回のiREXでは，僕も展示側に居たのと，普段お世話になっている方々とのコミュニケーションに時間を使ったので，あまり工業製品側のセクションを見れなかったのが残念です．</p>
<p>また，研究関連のみでなく，日本のロボット関連機器のソフトウエアは非常に貧弱です．普段，僕が扱っているのはすべて海外製品です．一人多国籍軍です．海外製品には，細かい仕様だけでなく，簡単に使い始められるソフトウエアがあり，また，他のソフトウエアと繋げるためのインターフェースがあります．さらに気のきいたものでは，独自のミドルウエアが用意されていて，多数の言語やＯＳを選んで使うことができ，ネットワークに対応していて遠隔操作が簡単にできるようなものもあります．日本でこのレベルに達している機器がいくつあるでしょうか・・・</p>
<p>つまり，これくらいソフトウエアに力を注がなければ，海外では製品として売れないのです．</p>
<h1>なんでこうなったのか</h1>
<p>一つは日本の人間が，形が無いものに対する価値を認められなかった点にあると思います．マニュアルやソフトウエアに関して，それがお金を払う価値があるもので，製品の一部であるという認識が欠落しています．オマケ程度にしか見ていないのです．</p>
<p>もちろんソフトウエアを扱う会社はこの限りではありませんが，ロボットという事に関して言えば，モノがありき，なのは仕方ありません．ただ，モノを作っている会社に，この意識があるのかどうか，はなはだ疑問です．</p>
<p>買う側にも問題があります．こういうソフトウエアやサービスについて，価値を認める仕組みになっていますか？単純に相見積もりする際に，ソフトウエアやサービスで比べることって出来てますかね？モノがあって，サービスは二の次なのが現状だと思います．</p>
<p>でも，作る側，とくに海外に製品を出そうと思っている人がこう思っていてはダメです．製品にはそれに付帯するソフトウエアやマニュアルを含めた，「サービス」が含まれています．この辺をどれだけの人が理解できているでしょうか．</p>
<p>開発資金が無い，というのは非常にツライ意見ですが，ハードは90点，ソフトは30点という製品Aと，ハードは70点，ソフトも70点という製品Bなら，製品Bを選ぶのがこれからの潮流になると思います．前者を選ぶのは骨董品の考えをしている人かエキスパートかどちらかです．ハードウエアの70点を90点にするコストと，30点のソフトウエアを70点にするコストは，どう考えてもソフトのコストの方が低くなります．まずはそういう仕事が出来る若いエンジニアを雇ってください．</p>
<h1>どういうソフトウエアがいいのか</h1>
<p>では，どうしたらいいのでしょうか．まずは，どういうソフトウエアがウケるのか，についてまとめます．</p>
<p>一言で言うなら，噛めば噛むほど味が出るソフトウエアです．</p>
<p>まず，その日のうちに動かすことができるソフトウエアが必要です．<br />
出来れば15分．なるべくなら一日で，ロボット製品の動作の確認ができること．</p>
<p>次に，一週間くらいで，自分自身のプログラムを作成できるようにする工夫です．<br />
これはAPIを単純に用意するのだけではなく，それを使ってデモプログラムを作るための環境設定方法などをまとめたチュートリアルです．</p>
<p>最後に，使いこなしてきた時に参照できるAPIのリストです．<br />
このレベルのユーザの要求は多岐にわたるので，周到な用意が必要になりますが，いちばん簡単なのはすべてオープンにすることでしょうか．APIがアウトプットする際に使うさまざまな付加機能が邪魔になることがありますから，これらを取り除くことすら彼らは要求します．このレベルのユーザは，自身で開発することのリスクも十分に理解したユーザですから，デベロッパは渡り合いやすい相手だと思います．</p>
<p>とにかく，3・4日，時には一週間以上，スペックシートとにらめっこして本体が動かない，というのはストレスです．ユーザにとってもそうですし，そのユーザの上司が先にパンクしますwww．良く解ってない人ならなおさら，というわけです．</p>
<h1>RTミドルウエアが解になり得るか</h1>
<p>どちらかといえばこの答えはNOです．単純にRTCに対応させただけでは，このようなソフトウエアにはなりません．</p>
<p>ただ，上記の枠組みを提供する方法の一つになり得ると考えています．つまり上記の枠組みになぞらえてRTCを使えば，この答えはYESになります．</p>
<p>私がこれまで考えたシナリオだと，こうなります．</p>
<p>まず，ユーザにRTCをサンプルとして提供します．RTCはこれまで提供していたAPIをラップした，単純なもので良いです．機能のすべてをRTCのレベルでアクセス出来る必要はありません．また，そのRTCを使ったサンプルプログラムを提供します．これらはインストーラでインストールが出来，単一のexeファイルやbatファイルなどから起動が出来るようにします．決して，ユーザにRT System Editorを使わせてはなりません．下手です．<br />
これで最初の関門をクリアさせます．</p>
<p>次の関門では，RTCを再利用してもらいます．この辺はRTCを自身で作る作業が必要になってしまいますが，いずれRTミドルウエアのような仕組みを使うことがロボットを作ることと同義になるのは間違いありませんから気にしてはいけません(笑)</p>
<p>最後の難関ではユーザが直接APIに触れます．このレベルでは隠された機能が解放されます．<br />
APIを使ったデバイスの初期化や終了処理の例としてRTCは最適です．RTCのソースコードをユーザにサンプルとして提供することで，どの部分が初期化なのか，エラー処理なのか．どのAPIでデータを取得できるのか．それがわかるはずです．<br />
もちろん，使っていないAPIに関するマニュアルが必要ですが，このレベルのユーザはdoxygenなどがコメントから自動的に生成するマニュアルで十分です．</p>
<h1>誰がRTミドルウエアのユーザなのか</h1>
<p>最後に，ロボット展のプレゼンに話を戻すと，誰がRTミドルウエアのユーザなのか，プレゼンする側が良く解っていたのか疑問です．</p>
<p>前節でお話しした内容は，RTMに対応した製品を提供するデバイスメーカーのためのストーリです．短い時間の中でこのストーリを言うのは無理ですが，何がハッピーなのかをもう少し具体的にイメージ出来れば，よりわかりやすく話が出来るはずですし，聞いている人がたとえ第三者であったとしても違うものです．</p>
<h1>まとめ</h1>
<p>僕はRTミドルウエアは，同じような目的を持つ海外のロボット用ミドルウエアに比べて多くの点でアドバンテージを持っているモノだと確信していますが，イマイチ浸透していないのが残念でなりません．</p>
<p>日本発のものを皆で育てようという人こそ，国際化ってことに理解がある人だと思うんですがね．<br />
このウェブに入門記事を載せてるのはそういう意味です．これからロボットまで，海外の規格や技術のマネをするんですかね？</p>
<p>ここまで読んでいただいてありがとうございます．<br />
ぜひ，一度，OpenRTMを使ってみてください．質問があればOpenRTMのメーリングリストにメールを送るなり，僕にtwitterで話しかけるなり，なんでも周りの人を使ってみてください．</p>
<p>（2011/11/14 用語を間違えてました．ベンダーロックアウト×→ベンダーロックイン○）</p>
]]></content:encoded>
			<wfw:commentRss>http://ysuga.net/robot/etc/1135/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RTシステムインテグレーションツール「FIROSOPHY (フィロソフィ)」</title>
		<link>http://ysuga.net/robot/rtm/rtc/firosophy</link>
		<comments>http://ysuga.net/robot/rtm/rtc/firosophy#comments</comments>
		<pubDate>Fri, 26 Aug 2011 14:38:32 +0000</pubDate>
		<dc:creator>ysuga</dc:creator>
				<category><![CDATA[RTコンポーネント]]></category>
		<category><![CDATA[OpenRTM-aist]]></category>
		<category><![CDATA[RTミドルウエア]]></category>
		<category><![CDATA[ロボット]]></category>

		<guid isPermaLink="false">http://ysuga.net/?p=907</guid>
		<description><![CDATA[FIROSOPHY FIROSOPHY（フィロソフィ）は，RTシステムの自動的なつなぎかえを行うことで，モードの切り替え，エラー処理，状態遷移とシナリオ実行を可能とするツールです． デモ動画 FIROSOPHYの紹介 ロボットの動作モードを，システムのつなぎかえで実現する例です． シミュレータ上のバッテリ電圧を監視するコンポーネントの状態変化をトリガとして，システムを切り替えます． 入力ポートのデータがある値よりも低いとINACTIVEになる「FloatLessThan」およびその逆の「FloatGreaterThan」を使い，バッテリ電圧が低い時は，ロボットのエネルギ元のキノコ（Fungi）を収集し，バッテリ電圧が十分の場合は鉱石（Ore）を収集します． ロボット本体（シミュレータ）には，キノコの方向を表すポートと，鉱石のポートを表すポートがあるので，コントローラの目標進行方向をどちらの値にするか否かでロボットの行動を決定しています． では動画をどうぞ． FIROSOPHYの使い方 FIROSOPHYの基本的な使い方です．新しいバージョンは若干異なりますが，コンセプトを理解していただけると思います． では動画をどうぞ． FIROSOPHYの使い方その２ FIROSOPHYを使って，エラー処理をする例です． システムを構成するRTコンポーネントの一つがERROR状態になった場合，すぐにコンポーネントをリセットする処理を加えています． たとえば，ロボットが転倒した場合に，転倒検出コンポーネントの状態監視をして回復処理をするためのシステムに再構成するなどの処理も可能でしょう． では動画をどうぞ． 概要 FIROSOPHY (FInite RObotics System OPeration Handler by Ysuga) は，ロボットの動作制御プログラム資産の経年劣化を抑えるための，モデルドリブンなアーキテクチャー (Model Driven Architechture, MDA) を提供するためのソフトウエアです． ロボットのハードウエアに依存した下位層のプログラムは，RTミドルウエア (RT-middleware, RTM) によって抽象化されます．さらに，RTミドルウエアの連携制御をおこなうプログラムもRTミドルウエアによって記述されます． しかし，より複雑なシステムの記述のためには，RTミドルウエアの枠組みのみでは，サービスを指向した動作シーケンスを記述するには不十分です． 現状のRTミドルウエアの枠組みで多くのロボットが下図のような一点集中型の制御システムを採用しています．アクチュエータや音声合成などのモジュールのコンポーネント化は進んでいますが，サービスという単位で考えた場合，中央のコントローラRTCがすべてをつかさどっており，サービスの詳細に変更があった場合は，コントローラの内部の記述にあるシーケンス自体を設計しなおすことが必要です． FIROSOPHYでは，ロボットの制御を有限状態マシン（Finite State Machine, FSM）として記述します．それぞれの状態 (State) をロボットの動作要素 (Motion Premitive) とし，その遷移 (transition) によって上位の動作シーケンス (Task Sequence) を記述するのです． 各状態はRTミドルウエア上の接続状態，すなわちRT Systemとし，状態遷移はその繋ぎ替えと活性化(activate)/不活性化(deactivate)に相当します．つまり開発者は，リーチングや歩行，しゃがみなどの単一(one-shot)，もしくは周期的な(cyclic) 動作を行うRT [...]]]></description>
			<content:encoded><![CDATA[<p><H1>FIROSOPHY</H1><br />
FIROSOPHY（フィロソフィ）は，RTシステムの自動的なつなぎかえを行うことで，モードの切り替え，エラー処理，状態遷移とシナリオ実行を可能とするツールです．</p>
<p><div class='postTabs_divs postTabs_curr_div' id='postTabs_0_907'>
<span class='postTabs_titles'><b>デモ動画</b></span><br />
<H1>デモ動画</H1><br />
<H2>FIROSOPHYの紹介</H2><br />
ロボットの動作モードを，システムのつなぎかえで実現する例です．</p>
<p>シミュレータ上のバッテリ電圧を監視するコンポーネントの状態変化をトリガとして，システムを切り替えます．<br />
入力ポートのデータがある値よりも低いとINACTIVEになる「FloatLessThan」およびその逆の「FloatGreaterThan」を使い，バッテリ電圧が低い時は，ロボットのエネルギ元のキノコ（Fungi）を収集し，バッテリ電圧が十分の場合は鉱石（Ore）を収集します．</p>
<p>ロボット本体（シミュレータ）には，キノコの方向を表すポートと，鉱石のポートを表すポートがあるので，コントローラの目標進行方向をどちらの値にするか否かでロボットの行動を決定しています．</p>
<p>では動画をどうぞ．<br />
<DIV align="center"><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/p-UvPbMtVbw&#038;hl=ja_JP&#038;fs=1&#038;"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><EMBED src="http://www.youtube.com/v/p-UvPbMtVbw&#038;hl=ja_JP&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></object></DIV> </p>
<p><H2>FIROSOPHYの使い方</H2><br />
FIROSOPHYの基本的な使い方です．新しいバージョンは若干異なりますが，コンセプトを理解していただけると思います．</p>
<p>では動画をどうぞ．<br />
<DIV align="center"><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/ExTbdLoHKH0&#038;hl=ja_JP&#038;fs=1&#038;"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><EMBED src="http://www.youtube.com/v/ExTbdLoHKH0&#038;hl=ja_JP&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></object></DIV></p>
<p><H2>FIROSOPHYの使い方その２</H2><br />
FIROSOPHYを使って，エラー処理をする例です．</p>
<p>システムを構成するRTコンポーネントの一つがERROR状態になった場合，すぐにコンポーネントをリセットする処理を加えています．</p>
<p>たとえば，ロボットが転倒した場合に，転倒検出コンポーネントの状態監視をして回復処理をするためのシステムに再構成するなどの処理も可能でしょう．</p>
<p>では動画をどうぞ．<br />
<DIV align="center"><object width="425" height="344"><param name="movie" value="http://www.youtube.com/v/KFEIEs1L6o0&#038;hl=ja_JP&#038;fs=1&#038;"><param name="allowFullScreen" value="true"><param name="allowscriptaccess" value="always"><EMBED src="http://www.youtube.com/v/KFEIEs1L6o0&#038;hl=ja_JP&#038;fs=1&#038;" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></object></DIV> </p>
<p></div>

<div class='postTabs_divs' id='postTabs_1_907'>
<span class='postTabs_titles'><b>概要</b></span><br />
<H1>概要</H1><br />
FIROSOPHY (FInite RObotics System OPeration Handler by Ysuga) は，ロボットの動作制御プログラム資産の経年劣化を抑えるための，モデルドリブンなアーキテクチャー (Model Driven Architechture, MDA) を提供するためのソフトウエアです．</p>
<p>ロボットのハードウエアに依存した下位層のプログラムは，RTミドルウエア (RT-middleware, RTM) によって抽象化されます．さらに，RTミドルウエアの連携制御をおこなうプログラムもRTミドルウエアによって記述されます．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/08/image7.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/08/image7.jpg" alt="" title="image7" width="592" height="325" class="aligncenter size-full wp-image-908" /></a></p>
<p>しかし，より複雑なシステムの記述のためには，RTミドルウエアの枠組みのみでは，サービスを指向した動作シーケンスを記述するには不十分です．</p>
<p>現状のRTミドルウエアの枠組みで多くのロボットが下図のような一点集中型の制御システムを採用しています．アクチュエータや音声合成などのモジュールのコンポーネント化は進んでいますが，サービスという単位で考えた場合，中央のコントローラRTCがすべてをつかさどっており，サービスの詳細に変更があった場合は，コントローラの内部の記述にあるシーケンス自体を設計しなおすことが必要です．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/08/image9.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/08/image9.jpg" alt="" title="image9" width="463" height="267" class="aligncenter size-full wp-image-909" /></a></p>
<p>FIROSOPHYでは，ロボットの制御を有限状態マシン（Finite State Machine, FSM）として記述します．それぞれの状態 (State) をロボットの動作要素 (Motion Premitive) とし，その遷移 (transition) によって上位の動作シーケンス (Task Sequence) を記述するのです．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/08/image10.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/08/image10.jpg" alt="" title="image10" width="526" height="332" class="aligncenter size-full wp-image-910" /></a></p>
<p>各状態はRTミドルウエア上の接続状態，すなわちRT Systemとし，状態遷移はその繋ぎ替えと活性化(activate)/不活性化(deactivate)に相当します．つまり開発者は，リーチングや歩行，しゃがみなどの単一(one-shot)，もしくは周期的な(cyclic) 動作を行うRT Systemを用意し，それらのRT Systemをつなぎ合わせることによって，上位のタスクを実現することができます．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/08/image12.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/08/image12.jpg" alt="" title="image12" width="286" height="269" class="aligncenter size-full wp-image-911" /></a></p>
<p>これにより，歩行やリーチングなどの動作単位での再利用性が増します．また，歩行時の安定制御と直立時の安定制御で異なる場合，各状態での制御の切り替え，起動/停止などが行え，CPUのリソースの無駄を省くことが出来ます．</p>
<p>さらには，ロボットのハードウエアが異なる場合においても，サービスの提供を行うための動作シーケンスの部分のみを抽象化して扱うことが出来ます．つまり，目的地への移動が，歩行であるか，タイヤでの移動であるか，FIROSOPHY上の記述ではハードウエア部分に依存することが無くなります．こうしてハードウエアに依存する下位層に依存することなく，サービスの本質が記述されているモデルの開発資産を保つことが出来るのです．</p>
<p></div>

<div class='postTabs_divs' id='postTabs_2_907'>
<span class='postTabs_titles'><b>ダウンロード</b></span><br />
<H1>ダウンロード</H1><br />
これらのソフトウエアのライセンスはGPLv2です．他の形式を希望の方はコメント欄にどうぞ．</p>
<p>FIROSOPHYは以下のパッケージに分割して開発しています．<br />
すべてのファイルにEclipseのプロジェクトファイルが追加されていますので，Eclipseにインポートしてください．EGitを使うと便利です．<br />
OpenRTSystemBuilderはOpenRTM-aistが必要になるので，プロジェクトのビルドパスをOpenRTM-aist-Java***.jarと，付属してるcommons-cli-***.jarに設定してください．Windowsのインストーラでインストールすると，C:\Program Files\OpenRTM-aist\1.0\jarの中にあります．</p>
<p><H2>OpenStateMachine</H2><br />
有限状態マシンを構成するためのライブラリで，FIROSOPHYの根幹です．<br />
各イベントにおける処理の追加や，ガードの追加がしやすいように工夫してあります．<br />
<a href="http://github.com/ysuga/OpenStateMachine" target="_blank">http://github.com/ysuga/OpenStateMachine</a></p>
<p><H2>OpenStateMachineUI</H2><br />
有限状態マシンのライブラリを表示するためのパネルが中心です．<br />
<a href="http://github.com/ysuga/OpenStateMachineUI" target="_blank">http://github.com/ysuga/OpenStateMachineUI</a></p>
<p><H2>OpenRTSystemBuilder</H2><br />
RTシステムを構築，変更，破棄するためのライブラリです．RT System Editorと同じ形式のＸＭＬファイルを編集できます．<br />
OpenRTM-aist-Java-1.0に依存しています．<br />
<a href="http://github.com/ysuga/OpenRTSystemBuilder" target="_blank">http://github.com/ysuga/OpenRTSystemBuilder</a></p>
<p><H2>FIROSOPHYEngine</H2><br />
OpenStateMachineとOpenRTSystemBuilderを合わせたライブラリです．FIROSOPHYの処理エンジンで，GUI無しでも動くことを目指しています．<br />
<a href="http://github.com/ysuga/FIROSOPHYEngine" target="_blank">http://github.com/ysuga/FIROSOPHYEngine</a></p>
<p><H2>FIROSOPHY</H2><br />
FIROSOPHYを使うためのGUIです．なるたけリッチなシステムを目指しています．<br />
<a href="http://github.com/ysuga/FIROSOPHY" target="_blank">http://github.com/ysuga/FIROSOPHY</a></p>
<p></div>

<div class='postTabs_divs' id='postTabs_3_907'>
<span class='postTabs_titles'><b>使い方</b></span><br />
Under Construction&#8230;</p>
<p></div>

<div class='postTabs_divs' id='postTabs_4_907'>
<span class='postTabs_titles'><b>その他の資料</b></span><br />
ROBOMEC2010での発表資料<br />
<a href='http://ysuga.net/wp-content/uploads/2011/08/ysuga_robomec2010_firosophy.pdf'>原稿『RTC の繋ぎ替えによるロボット制御管理ソフトウエア 「FIROSOPHY」の開発』</a><br />
<a href='http://ysuga.net/wp-content/uploads/2011/08/robomec2010_firosophy_ysuga.pdf'>ポスター（ROBOMEC2010)</a><br />
</div>

</p>
<script type='text/javascript'>jQuery(document).ready(function() { if(postTabs_getCookie('postTabs_907')) postTabs_show(postTabs_getCookie('postTabs_907'),907); });</script>]]></content:encoded>
			<wfw:commentRss>http://ysuga.net/robot/rtm/rtc/firosophy/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RTミドルウエア学習用台車ロボット簡易シミュレータ</title>
		<link>http://ysuga.net/robot/rtm/rtc/mobilerobotsim</link>
		<comments>http://ysuga.net/robot/rtm/rtc/mobilerobotsim#comments</comments>
		<pubDate>Thu, 26 May 2011 15:02:46 +0000</pubDate>
		<dc:creator>ysuga</dc:creator>
				<category><![CDATA[RTコンポーネント]]></category>

		<guid isPermaLink="false">http://ysuga.net/?p=788</guid>
		<description><![CDATA[スクリーンショット： ダウンロード： MobileRobotSimulator002.zip MobileRobotSimulator001.zip テスト用rtinjectのコマンド例： rtinject MobileRobot0.rtc:vel -c &#8220;RTC.TimedVelocity2D({time}, RTC.Velocity2D(0.1, 0, 0))&#8221;]]></description>
			<content:encoded><![CDATA[<p>スクリーンショット：<br />
<a href="http://ysuga.net/wp-content/uploads/2011/05/screen_shot.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/05/screen_shot.jpg" alt="" title="screen_shot" width="591" height="449" class="aligncenter size-full wp-image-794" /></a></p>
<p>ダウンロード：<br />
<a href='http://ysuga.net/wp-content/uploads/2011/05/MobileRobotSimulator002.zip'>MobileRobotSimulator002.zip</a></p>
<p><a href='http://ysuga.net/wp-content/uploads/2011/05/MobileRobotSimulator001.zip'>MobileRobotSimulator001.zip</a></p>
<p>テスト用rtinjectのコマンド例：<br />
rtinject MobileRobot0.rtc:vel -c &#8220;RTC.TimedVelocity2D({time}, RTC.Velocity2D(0.1, 0, 0))&#8221;</p>
]]></content:encoded>
			<wfw:commentRss>http://ysuga.net/robot/rtm/rtc/mobilerobotsim/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>XBee利用のためのライブラリ xbeemicrolib</title>
		<link>http://ysuga.net/robot/micon/xbeemicrolib</link>
		<comments>http://ysuga.net/robot/micon/xbeemicrolib#comments</comments>
		<pubDate>Sun, 27 Mar 2011 02:29:41 +0000</pubDate>
		<dc:creator>ysuga</dc:creator>
				<category><![CDATA[マイコン]]></category>

		<guid isPermaLink="false">http://ysuga.net/?p=643</guid>
		<description><![CDATA[XBeeを使うためのライブラリを自前で作りました．まだまだドラフトバージョンですが，これを使ったプログラミングフレームワークを提供する予定です． デモ１．Coronに移植したxbeemicrolibを使って，CoronとPCとの通信を行っています． デモ２．CQ Maryに移植したxbeemicrolibを使って，Maryを計2台とPCとの3台で通信しています 以下のタブを変更しながら見てください ディジインターナショナル社のZigBee通信モジュール「XBee-ZB」をマイコンやPCから使うためのライブラリを開発しています．ライブラリというよりはフレームワークに近い作りになりましたが，どうせいずれはフレームワークを作るつもりだったので，これで行きます． （libxbeeはすでに存在していたので名称をxbeemicrolibに変更しました） XBeeには複数の製品がありますが，今回対応が確認できているのは，XBee-ZBというシリーズです． 製品名の下に「Series2」という刻印があります． XBeeは最低2台必要です． 1つのネットワークに，コーディネータと呼ばれるXBeeが1台必要です．これ以外にエンドデバイスと，ルーターという2種類のXBeeが配置できます． コーディネータを使うかエンドデバイスにするかは，ファームウェアで変わります つまりまず，製品のファームウェアをX-CTUでアップデートする必要があります． X-CTUによるアップデートの項をお読みください． 現在はPC版，CQ Mary版，Coron版が公開されております． 概要と使い方，を良くお読みのうえお使いください． このライブラリを使ったことによる損害に対して，ysugaは一切責任を負いません． このライブラリのライセンスはGPLです．その他のライセンス契約を希望される方はysugaまでご連絡ください． 「コーディネータ側の例」 PC版(Win, VC2008)： xbeemicrolib_coordinator110328 「エンドデバイス側の例」 PC版(Win, VC2008)： xbeemicrolib_enddevice110328 CQ Mary版： xbeemicrolib_mary110328（CQ Maryについてはこちらをご覧ください：【増刊】超小型ARMマイコン基板 特設ページ） Coron版: xbeemicrolib_coron110330（Coronについてはこちらをご覧ください：ロボット用マイコンボード「Coron」） X-CTUのインストール まずDigiインターナショナルのサイトに飛びます． http://www.digi.com/ メニューから「Support」＞「Diagnostics, Utilities, and MIBs」を選択します． 現れた画面の選択肢を一番下までスクロールさせ，「X-CTU」を選んで，Selectボタンをクリックします． X-CTUの5.1.4.1バージョンを選択してダウンロードし，インストールします． XBeeのファームウェアのダウンロードと読み込み 次に，XBeeのファームウェア本体をダウンロードして，X-CTUに読み込ませる作業があります． ウェブからダウンロードするボタンがあるのですが，僕の環境では上手く動かなかったので，手動で認識させる方法をお教えします． 先ほどのX-CTUのダウンロード画面から，「Firmware Updates」を選択します． 出てきたメニューから「XBee / XBee-Pro ZB (ZigBee) Adapters」を選択します． ここからファームウェアをダウンロードしますが，一番上が新しいと思ったらハマります．冷静に「2&#215;70」バージョンの最新版を選択します．2011年3月22日時点では下記のものです． [...]]]></description>
			<content:encoded><![CDATA[<p>XBeeを使うためのライブラリを自前で作りました．まだまだドラフトバージョンですが，これを使ったプログラミングフレームワークを提供する予定です．</p>
<p>デモ１．Coronに移植したxbeemicrolibを使って，CoronとPCとの通信を行っています．</p>
<p><iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/z4i-d-2u1VA" frameborder="0" allowfullscreen></iframe></p>
<p>デモ２．CQ Maryに移植したxbeemicrolibを使って，Maryを計2台とPCとの3台で通信しています</p>
<p><iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/UyDCZoh8z7A" frameborder="0" allowfullscreen></iframe></p>
<p>以下のタブを変更しながら見てください</p>
<p><div class='postTabs_divs postTabs_curr_div' id='postTabs_0_643'>
<span class='postTabs_titles'><b> 概要</b></span><br />
ディジインターナショナル社のZigBee通信モジュール「XBee-ZB」をマイコンやPCから使うためのライブラリを開発しています．ライブラリというよりはフレームワークに近い作りになりましたが，どうせいずれはフレームワークを作るつもりだったので，これで行きます．</p>
<p>（libxbeeはすでに存在していたので名称をxbeemicrolibに変更しました）</p>
<p>XBeeには複数の製品がありますが，今回対応が確認できているのは，XBee-ZBというシリーズです．<br />
製品名の下に「Series2」という刻印があります．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/digi_01.jpg"><img class="aligncenter size-medium wp-image-649" title="digi_01" src="http://ysuga.net/wp-content/uploads/2011/03/digi_01-300x179.jpg" alt="" width="300" height="179" /></a></p>
<p>XBeeは最低2台必要です．<br />
1つのネットワークに，コーディネータと呼ばれるXBeeが1台必要です．これ以外にエンドデバイスと，ルーターという2種類のXBeeが配置できます．<br />
コーディネータを使うかエンドデバイスにするかは，ファームウェアで変わります<br />
つまりまず，製品のファームウェアをX-CTUでアップデートする必要があります．<br />
X-CTUによるアップデートの項をお読みください．</p>
<p>現在はPC版，CQ Mary版，Coron版が公開されております．</p>
<p></div>

<div class='postTabs_divs' id='postTabs_1_643'>
<span class='postTabs_titles'><b> ダウンロード</b></span><br />
概要と使い方，を良くお読みのうえお使いください．</p>
<p>このライブラリを使ったことによる損害に対して，ysugaは一切責任を負いません．<br />
このライブラリのライセンスはGPLです．その他のライセンス契約を希望される方はysugaまでご連絡ください．</p>
<p>「コーディネータ側の例」<br />
PC版(Win, VC2008)：<br />
<a href='http://ysuga.net/wp-content/uploads/2011/03/xbeemicrolib_coordinator110328.zip'>xbeemicrolib_coordinator110328</a></p>
<p>「エンドデバイス側の例」<br />
PC版(Win, VC2008)：<br />
<a href='http://ysuga.net/wp-content/uploads/2011/03/xbeemicrolib_enddevice110328.zip'>xbeemicrolib_enddevice110328</a></p>
<p>CQ Mary版：<br />
<a href='http://ysuga.net/wp-content/uploads/2011/03/xbeemicrolib_mary110328.zip'>xbeemicrolib_mary110328</a>（CQ Maryについてはこちらをご覧ください：<a href="http://toragi.cqpub.co.jp/tabid/412/Default.aspx">【増刊】超小型ARMマイコン基板 特設ページ</a>）</p>
<p>Coron版:<br />
<a href='http://ysuga.net/wp-content/uploads/2011/03/xbeemicrolib_coron110330.zip'>xbeemicrolib_coron110330</a>（Coronについてはこちらをご覧ください：<a href="http://techno-road.com/products/coron.html">ロボット用マイコンボード「Coron」</a>）</p>
<p></div>

<div class='postTabs_divs' id='postTabs_2_643'>
<span class='postTabs_titles'><b> X-CTUのインストールとアップデート</b></span></p>
<h1>X-CTUのインストール</h1>
<p>まずDigiインターナショナルのサイトに飛びます．</p>
<p>http://www.digi.com/</p>
<p>メニューから「Support」＞「Diagnostics, Utilities, and MIBs」を選択します．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/digi_02.jpg"><img class="aligncenter size-medium wp-image-650" title="digi_02" src="http://ysuga.net/wp-content/uploads/2011/03/digi_02-300x138.jpg" alt="" width="300" height="138" /></a></p>
<p>現れた画面の選択肢を一番下までスクロールさせ，「X-CTU」を選んで，Selectボタンをクリックします．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/digi_03.jpg"><img class="aligncenter size-medium wp-image-651" title="digi_03" src="http://ysuga.net/wp-content/uploads/2011/03/digi_03-300x195.jpg" alt="" width="300" height="195" /></a></p>
<p>X-CTUの5.1.4.1バージョンを選択してダウンロードし，インストールします．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/digi_04.jpg"><img class="aligncenter size-medium wp-image-652" title="digi_04" src="http://ysuga.net/wp-content/uploads/2011/03/digi_04-300x259.jpg" alt="" width="300" height="259" /></a></p>
<h1>XBeeのファームウェアのダウンロードと読み込み</h1>
<p>次に，XBeeのファームウェア本体をダウンロードして，X-CTUに読み込ませる作業があります．<br />
ウェブからダウンロードするボタンがあるのですが，僕の環境では上手く動かなかったので，手動で認識させる方法をお教えします．</p>
<p>先ほどのX-CTUのダウンロード画面から，「Firmware Updates」を選択します．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/digi_05.jpg"><img class="aligncenter size-medium wp-image-653" title="digi_05" src="http://ysuga.net/wp-content/uploads/2011/03/digi_05-300x207.jpg" alt="" width="300" height="207" /></a></p>
<p>出てきたメニューから「XBee / XBee-Pro ZB (ZigBee) Adapters」を選択します．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/digi_06.jpg"><img class="aligncenter size-medium wp-image-654" title="digi_06" src="http://ysuga.net/wp-content/uploads/2011/03/digi_06-300x188.jpg" alt="" width="300" height="188" /></a></p>
<p>ここからファームウェアをダウンロードしますが，一番上が新しいと思ったらハマります．冷静に「2&#215;70」バージョンの最新版を選択します．2011年3月22日時点では下記のものです．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/digi_07.jpg"><img class="aligncenter size-medium wp-image-655" title="digi_07" src="http://ysuga.net/wp-content/uploads/2011/03/digi_07-300x202.jpg" alt="" width="300" height="202" /></a></p>
<p>ダウンロードしたZipファイルは展開する必要がありません．<br />
これをX-CTUがインストールされているフォルダにコピーします．<br />
僕の環境では，<br />
C:\Program Files (x86)\Digi\XCTU\update<br />
というフォルダに置いておきました．</p>
<p>次にX-CTUを起動します．</p>
<p>まず，Modem Configurationのタブを選択します．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/digi_08.jpg"><img class="aligncenter size-medium wp-image-656" title="digi_08" src="http://ysuga.net/wp-content/uploads/2011/03/digi_08-229x300.jpg" alt="" width="229" height="300" /></a></p>
<p>次に，「Download new versions」というボタンをクリックします<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/digi_09.jpg"><img class="aligncenter size-medium wp-image-657" title="digi_09" src="http://ysuga.net/wp-content/uploads/2011/03/digi_09-300x198.jpg" alt="" width="300" height="198" /></a></p>
<p>ここで「File」をえらび，先ほどのZIPファイルを選択すれば，X-CTUにファームウェアが読み込まれます．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/digi_10.jpg"><img class="aligncenter size-full wp-image-658" title="digi_10" src="http://ysuga.net/wp-content/uploads/2011/03/digi_10.jpg" alt="" width="228" height="172" /></a></p>
<p>X-CTUの使い方，に進んでください</p>
<p></div>

<div class='postTabs_divs' id='postTabs_3_643'>
<span class='postTabs_titles'><b> X-CTUの使い方</b></span><br />
X-CTUの使い方について解説しますが，ファームウェアのアップデートが終わっていない方はX-CTUのインストールの項をよく読みなおしてください．</p>
<p>X-CTUを起動する前に，PCにXBeeを接続します．XBeeの接続には，変換基板が必要になりますが，ysugaが動作を確認しているのは以下の2つです．<br />
１．SparkFun XBee Explorer USB</p>
<p>http://www.sparkfun.com/products/8687</p>
<p>http://www.switch-science.com/products/detail.php?product_id=30</p>
<p>http://www.marutsu.co.jp/shohin_71503/</p>
<p>２．マルツパーツ　XB基板</p>
<p>http://www.marutsu.co.jp/shohin_104610/</p>
<p>XBee Explorerの方が入手性が高く，使ってるUSB変換チップがFTDI社のものなので信頼がおけます．通信モニタ用のLEDも付いています．ただし，リセットスイッチの取り付けが必要になります．<br />
XB基板は使っているチップがシリコンラボラトリー社のCP210xシリーズでドライバを始めソフトウエアが酷いです．考え直してもらいたいですね．リセットボタンがあるのでこちらの方がこの用途には便利ですが･･･<br />
このサイトでドライバのインストールの仕方を解説しているので，ハマった人がいたらそちらを確認してみてください．</p>
<p>http://ysuga.net/robot/micon/xb_driver_install</p>
<p>XBee Explorer USBのリセットスイッチは，裏面から見てRSTと書かれたピンと，GNDと書かれたピンの間にスイッチを挿入します．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/digi_11.jpg"><img class="aligncenter size-medium wp-image-659" title="digi_11" src="http://ysuga.net/wp-content/uploads/2011/03/digi_11-300x261.jpg" alt="" width="300" height="261" /></a></p>
<p>ysugaはフリスクケースに入れて使っています．便利．</p>
<p>さて，XBeeをアダプタに取り付けますが，逆挿しが出来てしまうので，XBeeの刺し込み方向には十分注意してください．<br />
アダプタをPCにUSB接続してからX-CTUを起動します．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/digi_12.jpg"><img class="aligncenter size-medium wp-image-660" title="digi_12" src="http://ysuga.net/wp-content/uploads/2011/03/digi_12-229x300.jpg" alt="" width="229" height="300" /></a></p>
<p>自動的にCOMポートを検出してくれます（写真はXB基板を使った例）<br />
ここで通信の設定をします．設定項目は以下のものです<br />
１．ボーレート他，COMポートの設定<br />
２．APIモードか，ATモードか，<br />
３．APIモードの場合，AP=1かAP＝２か．<br />
この設定がどれかひとつでも間違っていると通信が失敗します．</p>
<p>XBeeは購入時点では，ファームウェアが古く，<br />
１．ボーレート9600，8ビットノンパリティ，1ストップビット，フロー無し<br />
２．ATモード<br />
３．設定の必要なし<br />
のはずです．上の写真の設定のままで動くはずです．</p>
<p>「Test Query」ボタンを押して，下記のようなダイアログが出てくれば，一応は通信出来ています．このまま進みます．Unable Connectと出た場合は，上記の設定をいじって，何とか「ID=ホニャララ」が出るまで続けます．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/digi_13.jpg"><img class="aligncenter size-medium wp-image-661" title="digi_13" src="http://ysuga.net/wp-content/uploads/2011/03/digi_13-300x286.jpg" alt="" width="300" height="286" /></a></p>
<p>次にModem Configurationを選択します．ここで「Modem」を「XB24-ZB」を選択します．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/digi_14.jpg"><img class="aligncenter size-medium wp-image-662" title="digi_14" src="http://ysuga.net/wp-content/uploads/2011/03/digi_14-300x296.jpg" alt="" width="300" height="296" /></a></p>
<p>次にFunction Setを選択します．このライブラリはAPI通信に対応しています．<br />
ZIGBEE COORDINATOR APIか，ZIGBEE ENDDEVICE APIに対応しています．ZIGBEE ROUTER APIにも対応予定です．<br />
もちろん，それぞれがコーディネータとエンドデバイス，ルータに対応しています．コーディネータはネットワークに最低1台必要です．<br />
コーディネータを例にとって説明します．</p>
<p>「Show Default」を選択すると，デフォルトの設定値が表示されます．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/digi_16.jpg"><img class="aligncenter size-medium wp-image-663" title="digi_16" src="http://ysuga.net/wp-content/uploads/2011/03/digi_16-229x300.jpg" alt="" width="229" height="300" /></a></p>
<p>ここで「Always Update firmware」を選択状態にして，「Write」を押すとファームウェアのアップデートが始まります．<br />
＊ファームウェアのアップデートは自己責任でお願いします．<br />
ここで，リセットを求められるかもしれません．リセットしてあげてください．また，ファームウェアアップデート直後の通信が失敗することが多いのですが，大抵はアップデートが済んでいます．</p>
<p>アップデート後はAPIモードでなければ通信出来なくなります．X-CTUの最初の画面で，「Enable API」を選択してからTest Queryをクリックしてみてください．<br />
Modem Configurationの画面で「Read」を行って，ファームウェアが表示されればアップデートは終了です．</p>
<p>この後，普通はPANIDなどの設定が必要ですが，僕のライブラリはライブラリ内でPANIDの設定が可能になっています．<br />
「使い方」に進んでください．</p>
<p></div>

<div class='postTabs_divs' id='postTabs_4_643'>
<span class='postTabs_titles'><b> 使い方</b></span><br />
まずは概要をお読みください．</p>
<p>まず，製品のファームウェアをX-CTUでアップデートする必要があります．<br />
X-CTUによるアップデートの項をお読みください．</p>
<p>展開されるコードは，Visual Studio 2008でプログラムしたものです．<br />
今後はArduino, Arduino FIO, Coron, CQ Mary基板に移植します．</p>
<p>展開されたファイルはコーディネータ側の例，エンドデバイス側の例，ともに同じlibxbeeを使っています．<br />
ご自身で変更されるファイルは<br />
1. xbee_conf.h<br />
(2. uart.c)<br />
3. main.c<br />
だけだと思います．</p>
<h2>1.xbee_conf.h</h2>
<p>ZIGBEEネットワークに関する設定です．主な設定項目は<br />
1. pan64bitID<br />
PANIDで，ネットワークのIDです．すべてのデバイスで同じ値である必要があります．<br />
2. NI_STRING_LENGTH, networkIdentifierString<br />
ネットワークの識別子文字列です．coordinatorの場合は設定する必要がありません．なぜならコーディネータのアドレスは常にゼロだからです．エンドデバイス向けにデータを送信する場合は，libxbeeでは，この識別子からアドレスを解決します．たとえば以下のように設定します．</p>
<p>const char NI_STRING_LENGTH = 6; // This value should include null character.<br />
const char* networkIdentifierString = &#8220;HELLO&#8221;;</p>
<p>NI_STRING_LENGTHには最後のヌル文字の文の長さも入れてあげます．</p>
<h2>2.uart.c</h2>
<p>COM番号を変更してあげてください．</p>
<h2>3. main.c</h2>
<p>コーディネータとエンドデバイスでは少し異なります．</p>
<p>エンドデバイス側はコーディネータにデータを送信するプログラムになっていますが，コーディネータのアドレスは常にゼロなので解決する必要がありません．<br />
kbhit関数で常にキーボードを監視して，キーコードをXBeeに送信します．</p>
<p>コーディネータ側は「r」キーが押されるとエンドデバイスのアドレス解決を試みます．デフォルトでエンドデバイスの識別子は「HELLO」になっています．<br />
他のキーを押すとデータが送信されます．</p>
<p>受信はmyRxPacketという関数で行います．mainの前の方で，XBee_registerOnRxPacketという関数を使って，myRxPacket関数を受信時のイベントハンドラとして登録してあります．これで受信時には自動的にこの関数が呼ばれます．<br />
引数には送信元の64ビットアドレス，16ビットアドレス（どちらもネットワークアドレスです），データ本体とそのサイズが入っています．<br />
例では単純にprintfするだけです．</p>
<h1>エンドデバイス側のmain関数</h1>
<pre>
#include <stdio.h>
#include <conio.h>

#include "libxbee.h"

/**
 * @brief Event handler code. This function is automatically called when Data Packet is received from XBee module.
 * This function is called in XBee_polling function. The polling function must be called periodically.
 */
void myOnRxPacket(const char* addr64, const char* addr16, const char* dat, const unsigned short size)
{
	printf("Rx(%s)\n", dat);
}

/**
 * @brief Host Record
 * Host record must be resoved by calling XBee_resolve function before using it (except Coordinator record, because it's special.)
 */
XBeeHostRecord coordinator = HOST_RECORD_COORDINATOR;

/**
 * @brief main function.
 */
int main(int argc, char* argv[])
{
	/**
	 * Setup Xbee. Parameters of the network is configured in this function.
	 * Parameters can be changed by developer in "xbee_conf.h" file.
	 */
	XBee_setup();

	/**
	 * This function register the receive event handler.
	 */
	XBee_registerOnRxPacket(myOnRxPacket);

	/* Loop */
	while(1) {
		/* if keyboard is hit... */
		if(_kbhit()) {
			char c = _getch();
			XBee_transmit(&#038;coordinator, &#038;c, 1);
		}
		/**
		 * this function must be called periodically.
		 */
		XBee_polling();

	}
	return 0;
}
</pre>
<h2>コーディネータ側のmain.c</h2>
<pre>
#include <stdio.h>
#include <conio.h>

#include "libxbee.h"

/**
 * @brief Event handler code. This function is automatically called when Data Packet is received from XBee module.
 * This function is called in XBee_polling function. The polling function must be called periodically.
 */
void myOnRxPacket(const char* addr64, const char* addr16, const char* dat, const unsigned short size)
{
	printf("Rx(%s)\n", dat);
}

/**
 * @brief Host Record
 * Host record must be resoved by calling XBee_resolve function before using it (except Coordinator record, because it's special.)
 */
XBeeHostRecord enddevice = HOST_RECORD_INITIALIZER("HELLO");

/**
 * @brief main function.
 */
int main(int argc, char* argv[])
{
	/**
	 * Setup Xbee. Parameters of the network is configured in this function.
	 * Parameters can be changed by developer in "xbee_conf.h" file.
	 */
	XBee_setup();

	/**
	 * This function register the receive event handler.
	 */
	XBee_registerOnRxPacket(myOnRxPacket);

	/* Loop */
	while(1) {
		/* if keyboard is hit... */
		if(_kbhit()) {
			char c = _getch();
			if(c == 'r') { /* The hit key is 'r', resolve record. */
				XBee_resolve(&#038;enddevice);
				XBee_waitResolveDone();
			} else { /* other, transmit the key code. */
				XBee_transmit(&#038;enddevice, &#038;c, 1);
			}
		}
		/**
		 * this function must be called periodically.
		 */
		XBee_polling();

	}
	return 0;
}
</pre>
<p></div>

<div class='postTabs_divs' id='postTabs_5_643'>
<span class='postTabs_titles'><b>リンク</b></span><br />
</div>

</p>
<script type='text/javascript'>jQuery(document).ready(function() { if(postTabs_getCookie('postTabs_643')) postTabs_show(postTabs_getCookie('postTabs_643'),643); });</script>]]></content:encoded>
			<wfw:commentRss>http://ysuga.net/robot/micon/xbeemicrolib/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>【2011年トラ技4月号増刊ARM基板】XB基板のドライバインストール</title>
		<link>http://ysuga.net/robot/micon/xb_driver_install</link>
		<comments>http://ysuga.net/robot/micon/xb_driver_install#comments</comments>
		<pubDate>Thu, 24 Mar 2011 05:08:18 +0000</pubDate>
		<dc:creator>ysuga</dc:creator>
				<category><![CDATA[マイコン]]></category>

		<guid isPermaLink="false">http://ysuga.net/?p=618</guid>
		<description><![CDATA[トラ技4月号増刊超小型ARM基板特集 http://toragi.cqpub.co.jp/tabid/412/Default.aspx これに装着することが出来るXB基板がなかなか優秀です．何が優秀って，これ単体で，PCと接続してXBeeと通信出来るって点です． ただ，1点，USB-RS232C変換ICがCP2104･･･これ，ドライバインストーラが･･･Windows7 64bit版使ってるのでハマった． ま，言われてみればシンプルな方法でインストール出来たので，同じようにハマった人向けにメモを残しておきます．ほかのデバイスでも同様の作業でＯＫ． 1．ドライバのダウンロード Silicon Laboratoriesのウェブサイトにアクセスします． http://www.silabs.com/Pages/default.aspx ここで，CP210xの画像をクリックして，USB-UART変換ICのページに飛びます． 次に，USB製品の中から，USB-UART Bridgeのページに飛びます． ここでToolsタグをクリックします ここで「CP210x_VCP_Win_XP_S2K3_Vista_7.exe」を選択してダウンロードします． 2．ドライバのインストール すぐに実行してインストールを開始します 通常通り，「同意」したり，インストールフォルダを指定したりしますが，この辺では躓かないと思います． 最後に，「Launch the CP210x VCP Driver Installer」にチェックを入れて，OKします． え？と思った人は正しい．「VCPドライバを実行します」・・・って，いまインストールしたのは何？って思いますよね． これはCドライブ直下のSilabsフォルダにインストーラや必要なファイルを展開しただけです．ヤレヤレ･･･ んで，すぐにダイアログが出てきてドライバをインストールします． これを読んでいる人はWindows7 64bit環境だと思いますので，Program files (x86)フォルダ内にインストールされます． このフォルダは覚えておきましょう． 再起動を求められます．一応，やっとくのが良いかな． 3．ドライバの割り当て さて，意気揚々とXB基板をさしますが，ドライバが見つからない場合，僕と同じ症状です． このときはデバイスマネージャに飛びます．マイコンピュータから，システムのプロパティを開き，デバイスマネージャを開くことが出来ます． ここでドライバが入っていないCP210x USB UART Bridgeを見つけることが出来ます． これをダブルクリックして設定ダイアログを開き，ドライバを更新します． 慣れた人には当たり前の手順なんですが，なぜかハマりましたので解説しています． ここで「コンピュータを参照してドライバーソフトウエアを検索します」を選択 さらに「コンピュータ上のデバイスドライバーの一覧から選択します」を選択．ここでフォルダを選択してもなぜかインストール出来ません．ここでハマった・・・ んで，「ポート（COMとLPT）」を選択します ここで「ディスク使用」をクリックします． ようやくフォルダを開いてinfファイルを選択する段階．「フォルダを参照」して・・・ さっきインストールしたフォルダのinfファイルを選択します OKします んで，USB UART Bridgeを選択して完了です．]]></description>
			<content:encoded><![CDATA[<p>トラ技4月号増刊超小型ARM基板特集</p>
<p>http://toragi.cqpub.co.jp/tabid/412/Default.aspx</p>
<p>これに装着することが出来るXB基板がなかなか優秀です．何が優秀って，これ単体で，PCと接続してXBeeと通信出来るって点です．</p>
<p>ただ，1点，USB-RS232C変換ICがCP2104･･･これ，ドライバインストーラが･･･Windows7 64bit版使ってるのでハマった．</p>
<p>ま，言われてみればシンプルな方法でインストール出来たので，同じようにハマった人向けにメモを残しておきます．ほかのデバイスでも同様の作業でＯＫ．</p>
<h1>1．ドライバのダウンロード</h1>
<p>Silicon Laboratoriesのウェブサイトにアクセスします．</p>
<p>http://www.silabs.com/Pages/default.aspx</p>
<p>ここで，CP210xの画像をクリックして，USB-UART変換ICのページに飛びます．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/dl11.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/dl11-300x189.jpg" alt="Fig1 CP210x" title="Fig1 CP210x" width="300" height="189" class="aligncenter size-medium wp-image-620" /></a></p>
<p>次に，USB製品の中から，USB-UART Bridgeのページに飛びます．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/dl2.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/dl2-300x202.jpg" alt="Fig2 CP210x" title="Fig2 CP210x" width="300" height="202" class="aligncenter size-medium wp-image-621" /></a></p>
<p>ここでToolsタグをクリックします<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/dl3.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/dl3-300x271.jpg" alt="Fig3 CP210x" title="Fig3 CP210x" width="300" height="271" class="aligncenter size-medium wp-image-622" /></a></p>
<p>ここで「CP210x_VCP_Win_XP_S2K3_Vista_7.exe」を選択してダウンロードします．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/dl4.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/dl4-300x179.jpg" alt="Fig4 CP210x" title="Fig4 CP210x" width="300" height="179" class="aligncenter size-medium wp-image-623" /></a></p>
<h1>2．ドライバのインストール</h1>
<p>すぐに実行してインストールを開始します<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/dl5.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/dl5-300x211.jpg" alt="Fig5 CP210x" title="Fig5 CP210x" width="300" height="211" class="aligncenter size-medium wp-image-624" /></a></p>
<p>通常通り，「同意」したり，インストールフォルダを指定したりしますが，この辺では躓かないと思います．<br />
最後に，「Launch the CP210x VCP Driver Installer」にチェックを入れて，OKします．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/dl6.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/dl6-300x213.jpg" alt="Fig6 CP210x" title="Fig6 CP210x" width="300" height="213" class="aligncenter size-medium wp-image-625" /></a></p>
<p>え？と思った人は正しい．「VCPドライバを実行します」・・・って，いまインストールしたのは何？って思いますよね．<br />
これはCドライブ直下のSilabsフォルダにインストーラや必要なファイルを展開しただけです．ヤレヤレ･･･</p>
<p>んで，すぐにダイアログが出てきてドライバをインストールします．<br />
これを読んでいる人はWindows7 64bit環境だと思いますので，Program files (x86)フォルダ内にインストールされます．<br />
このフォルダは覚えておきましょう．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/dl7.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/dl7-300x124.jpg" alt="Fig7 CP210x" title="Fig7 CP210x" width="300" height="124" class="aligncenter size-medium wp-image-626" /></a></p>
<p>再起動を求められます．一応，やっとくのが良いかな．</p>
<h1>3．ドライバの割り当て</h1>
<p>さて，意気揚々とXB基板をさしますが，ドライバが見つからない場合，僕と同じ症状です．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/figure1.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/figure1-300x112.jpg" alt="Fig8 CP210x" title="Fig8 CP210x" width="300" height="112" class="aligncenter size-medium wp-image-627" /></a></p>
<p>このときはデバイスマネージャに飛びます．マイコンピュータから，システムのプロパティを開き，デバイスマネージャを開くことが出来ます．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/figure2.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/figure2-300x218.jpg" alt="Fig9 CP210x" title="Fig9 CP210x" width="300" height="218" class="aligncenter size-medium wp-image-628" /></a></p>
<p>ここでドライバが入っていないCP210x USB UART Bridgeを見つけることが出来ます．</p>
<p>これをダブルクリックして設定ダイアログを開き，ドライバを更新します．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/figure3.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/figure3-300x270.jpg" alt="Fig9 CP210x" title="Fig9 CP210x" width="300" height="270" class="aligncenter size-medium wp-image-629" /></a></p>
<p>慣れた人には当たり前の手順なんですが，なぜかハマりましたので解説しています．</p>
<p>ここで「コンピュータを参照してドライバーソフトウエアを検索します」を選択<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/figure4.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/figure4-300x244.jpg" alt="Fig10 CP210x" title="Fig10 CP210x" width="300" height="244" class="aligncenter size-medium wp-image-630" /></a></p>
<p>さらに「コンピュータ上のデバイスドライバーの一覧から選択します」を選択．ここでフォルダを選択してもなぜかインストール出来ません．ここでハマった・・・<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/figure5.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/figure5-300x244.jpg" alt="Fig11 CP210x" title="Fig11 CP210x" width="300" height="244" class="aligncenter size-medium wp-image-631" /></a></p>
<p>んで，「ポート（COMとLPT）」を選択します<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/figure6.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/figure6-300x244.jpg" alt="Fig12 CP210x" title="Fig12 CP210x" width="300" height="244" class="aligncenter size-medium wp-image-632" /></a></p>
<p>ここで「ディスク使用」をクリックします．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/figure7.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/figure7-300x243.jpg" alt="Fig13 CP210x" title="Fig13 CP210x" width="300" height="243" class="aligncenter size-medium wp-image-633" /></a></p>
<p>ようやくフォルダを開いてinfファイルを選択する段階．「フォルダを参照」して・・・<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/figure8.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/figure8-300x192.jpg" alt="Fig14 CP210x" title="Fig14 CP210x" width="300" height="192" class="aligncenter size-medium wp-image-634" /></a></p>
<p>さっきインストールしたフォルダのinfファイルを選択します<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/figure9.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/figure9-300x180.jpg" alt="Fig15 CP210x" title="Fig15 CP210x" width="300" height="180" class="aligncenter size-medium wp-image-635" /></a></p>
<p>OKします<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/figure10.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/figure10-300x129.jpg" alt="Fig16 CP210x" title="Fig16 CP210x" width="300" height="129" class="aligncenter size-medium wp-image-636" /></a></p>
<p>んで，USB UART Bridgeを選択して完了です．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/figure11.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/figure11-300x241.jpg" alt="Fig18 CP210x" title="Fig18 CP210x" width="300" height="241" class="aligncenter size-medium wp-image-637" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://ysuga.net/robot/micon/xb_driver_install/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>組み込みマイコンarduinoおよびOpenRTM-aist版RTC入門用ライブラリ「RTno（アールティーノ）」</title>
		<link>http://ysuga.net/robot/rtm/rtc/rtno</link>
		<comments>http://ysuga.net/robot/rtm/rtc/rtno#comments</comments>
		<pubDate>Sat, 12 Mar 2011 13:53:26 +0000</pubDate>
		<dc:creator>ysuga</dc:creator>
				<category><![CDATA[RTコンポーネント]]></category>

		<guid isPermaLink="false">http://ysuga.net/?p=614</guid>
		<description><![CDATA[組み込みマイコン用RTC開発キット「RTno（アールティーノ）」を開発しました． ROBOMEC2011での発表資料： 原稿（PDF） ポスター（PDF） SI2011での発表資料： スライド (SlideShare) ニュース： RTno Release 3.0をリリースしました．EthernetシールドやTimer1の実行コンテキストに対応しています． ぜひ，対応シールドとArduinoを使って，exampleを試してみてください． mbedに対応しましたー！！ mbed用RTnoライブラリURL mbed用RTnoテスト用プログラム ※入門記事を準備中です．しばしお待ち下さい．更新情報などはTwitterの@ysugaで．Follow me! 組み込みマイコンボード「Arduino」を使い，簡単にRTCに対応したデバイスを作るためのライブラリです． １．RTミドルウエアとは RTミドルウエアとは，分散オブジェクト技術に基づいたロボット用の共通プラットフォーム規格です．RTミドルウエアはネットワークロボティクスや，その他のRTコンポーネントと呼ばれるロボット要素の統合利用を簡単化します．このRTコンポーネント規格はOMG（Object Management Group)によって議論および定義されています． ２．arduino（あるでぃーの）とは arduino (アルディーノ，アルドゥイーノ）は，オープンソースの組み込みプロトタイピング用のプラットフォームで，ハードウエアはAtmelのAVRマイコンを使い，その回路図やブートローダなどはオープンソースのライセンスに基づいて公開されています． ３．RTno(あーるてぃーの)とは RTno (アールティーノ）は，RTコンポーネントとarduino（もしくはarduinoコンパチのデバイス）との間の通信を簡単化します． 下図をご覧ください．RTnoパッケージはarduino用のライブラリ「RTno」と，それと通信する「RTnoProxy」というRTコンポーネントのセットです．もし，arduinoのテンプレートに従ってプログラムをすれば，RTnoはRTnoProxyを通して，他のRTコンポーネントと通信出来ます． もう少し詳しく説明しましょう．通常の組み込みデバイス開発では，デバイス開発者は組み込みマイコン側の開発と，それをPCに接続して使うためのAPI関数の両方を開発し，他の開発者に提供していました．下図における赤色の部分です． さらにそれを使うユーザ）黄色部分）は，デバイス開発者のAPI関数を使ってデバイスを使うプログラムを作成します．API関数は組み込みデバイスと，ホスト（通常はPC)との通信をカプセル化しますが，システムインテグレータは，このようなAPI関数のドキュメントをたくさん，しかも注意深く読む必要がありました． さらに別のデバイスを使うプログラムを作った場合，そのプログラムとの通信部分もユーザが作成する必要があります． これはRTミドルウエアを使うと，ユーザの苦労は減ります．RTミドルウエアは，システムインテグレータに共通化されたプラットフォームを提供するので，通信部分の実装を簡単にすることが出来，デバイス毎のRTCを使えば良いことになります．下図の黄色部分が減りましたよね． でも，デバイス開発者は，API関数と同時にRTコンポーネントも開発しなくてはならなくなりました．赤色部分が増えましたよね． しかしRTnoを使えば，デバイス開発者は，PC側のRTC開発に触れる必要が無くなり，arduinoマイコンボードのプログラミングのみに専念出来ます．RTnoライブラリがRTnoProxyというRTコンポーネントとarduinoとの間の通信をカプセル化するからです（緑色）．RTnoProxyはarduinoに書き込まれたプログラムからRTCの情報（ポートの数やタイプ）を受け取り，自動的にRTCのインターフェースを変更します．また，他のRTCとarduinoの間の通信はすべて隠ぺいされるため，floatやdoubleなどの型をそのままarduinoと他のRTCの間で通信している感覚でプログラミングが出来ます． さらに，自分自身がユーザの場合は，他のコンポーネントと通信するポートをarduinoマイコンプログラム上に実装してしまえば，ユーザープログラムを書く必要が無くなります．RTnoを使えば最速のシステム・プロトタイピングが可能です． もちろん，arduinoは8ビットマイコンのAVRを使っていますから，その限られた性能ではRTnoはリッチ過ぎると思いますが，これからRTミドルウエアに触れるという方や，RTミドルウエアは分かるけど，使えるデバイスが無い，という方には，安価で簡単にI/O制御が出来るデバイスをRTCと簡単に接続できるという点でメリットが大きいと思って作りました． 従って「RTno」はRTミドルウエアのユーザでマイコン等の初心者であれば，arduino初心者のための素晴らしいプログラミングツールとなります．なぜならば，RTコンポーネントのプログラミングにそっくりな方法でプログラミングができ，さらに他のRTコンポーネントとの通信方法を提供することが出来るからです． また，arduinoユーザにとっては，RTnoはarduinoとPCとの通信を簡単化するツールとなり，より高度で洗練されたRTツールとの接続性を増します．RTCプログラミングへの入門ツールとしても使っていただけるのではないでしょうか？ 最新のv3.0がリリースされました． RTno (arduino側のライブラリ) arduino-1.0でのみサポート． GITHUB: https://github.com/ysuga/RTno RTnoProxy (PC側の実行ファイル) GITHUB: https://github.com/ysuga/RTnoProxy インストーラ (Win): OpenRTM-aist 1.1.0 RC3対応:RTnoProxySetup_OpenRTM1.1RC3 OpenRTM-aist [...]]]></description>
			<content:encoded><![CDATA[<p>組み込みマイコン用RTC開発キット「RTno（アールティーノ）」を開発しました．</p>
<p>ROBOMEC2011での発表資料：<br />
<a href='http://ysuga.net/wp-content/uploads/2011/03/ysuga_robomec2011.pdf'>原稿（PDF）</a><br />
<a href='http://ysuga.net/wp-content/uploads/2011/03/poster.pdf'>ポスター（PDF）</a></p>
<p>SI2011での発表資料：<br />
<a href='http://www.slideshare.net/SugaYuki/rt2011rtno'>スライド (SlideShare) </a></p>
<p>ニュース：<br />
<font color='red'>RTno Release 3.0をリリースしました．</font>EthernetシールドやTimer1の実行コンテキストに対応しています．<br />
ぜひ，対応シールドとArduinoを使って，exampleを試してみてください．</p>
<p>mbedに対応しましたー！！<br />
<a href='http://mbed.org/users/ysuga/libraries/RTno/m2lb0z'>mbed用RTnoライブラリURL</a><br />
<a href='http://mbed.org/users/ysuga/programs/RTnoLEDTest/m2m4z5'>mbed用RTnoテスト用プログラム</a></p>
<p>※入門記事を準備中です．しばしお待ち下さい．更新情報などはTwitterの<a href="http://twitter.com/ysuga">@ysuga</a>で．Follow me!</p>
<p><div class='postTabs_divs postTabs_curr_div' id='postTabs_0_614'>
<span class='postTabs_titles'><b>概要</b></span><br />
組み込みマイコンボード「Arduino」を使い，簡単にRTCに対応したデバイスを作るためのライブラリです．</p>
<h1>１．RTミドルウエアとは</h1>
<p>RTミドルウエアとは，分散オブジェクト技術に基づいたロボット用の共通プラットフォーム規格です．RTミドルウエアはネットワークロボティクスや，その他のRTコンポーネントと呼ばれるロボット要素の統合利用を簡単化します．このRTコンポーネント規格はOMG（Object Management Group)によって議論および定義されています．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/WhatsRTmiddleware1.jpg"><img class="aligncenter size-medium wp-image-686" title="WhatsRTmiddleware1" src="http://ysuga.net/wp-content/uploads/2011/03/WhatsRTmiddleware1-300x164.jpg" alt="" width="300" height="164" /></a></p>
<h1>２．arduino（あるでぃーの）とは</h1>
<p>arduino (アルディーノ，アルドゥイーノ）は，オープンソースの組み込みプロトタイピング用のプラットフォームで，ハードウエアはAtmelのAVRマイコンを使い，その回路図やブートローダなどはオープンソースのライセンスに基づいて公開されています．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image2-1.jpg"><img class="aligncenter size-medium wp-image-687" title="image2 (1)" src="http://ysuga.net/wp-content/uploads/2011/03/image2-1-300x222.jpg" alt="" width="300" height="222" /></a></p>
<h1>３．RTno(あーるてぃーの)とは</h1>
<p>RTno (アールティーノ）は，RTコンポーネントとarduino（もしくはarduinoコンパチのデバイス）との間の通信を簡単化します．</p>
<p>下図をご覧ください．RTnoパッケージはarduino用のライブラリ「RTno」と，それと通信する「RTnoProxy」というRTコンポーネントのセットです．もし，arduinoのテンプレートに従ってプログラムをすれば，RTnoはRTnoProxyを通して，他のRTコンポーネントと通信出来ます．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image2.gif"><img class="aligncenter size-medium wp-image-688" title="image2" src="http://ysuga.net/wp-content/uploads/2011/03/image2-300x169.gif" alt="" width="300" height="169" /></a></p>
<p>もう少し詳しく説明しましょう．通常の組み込みデバイス開発では，デバイス開発者は組み込みマイコン側の開発と，それをPCに接続して使うためのAPI関数の両方を開発し，他の開発者に提供していました．下図における赤色の部分です．</p>
<p>さらにそれを使うユーザ）黄色部分）は，デバイス開発者のAPI関数を使ってデバイスを使うプログラムを作成します．API関数は組み込みデバイスと，ホスト（通常はPC)との通信をカプセル化しますが，システムインテグレータは，このようなAPI関数のドキュメントをたくさん，しかも注意深く読む必要がありました．</p>
<p>さらに別のデバイスを使うプログラムを作った場合，そのプログラムとの通信部分もユーザが作成する必要があります．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image_rtno3.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image_rtno3-1024x268.jpg" alt="" title="image_rtno3" width="600" class="aligncenter size-large wp-image-721" /></a></p>
<p>これはRTミドルウエアを使うと，ユーザの苦労は減ります．RTミドルウエアは，システムインテグレータに共通化されたプラットフォームを提供するので，通信部分の実装を簡単にすることが出来，デバイス毎のRTCを使えば良いことになります．下図の黄色部分が減りましたよね．</p>
<p>でも，デバイス開発者は，API関数と同時にRTコンポーネントも開発しなくてはならなくなりました．赤色部分が増えましたよね．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image_rtno2.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image_rtno2-1024x247.jpg" alt="" title="image_rtno2" width="600" class="aligncenter size-large wp-image-722" /></a></p>
<p>しかしRTnoを使えば，デバイス開発者は，PC側のRTC開発に触れる必要が無くなり，arduinoマイコンボードのプログラミングのみに専念出来ます．RTnoライブラリがRTnoProxyというRTコンポーネントとarduinoとの間の通信をカプセル化するからです（緑色）．RTnoProxyはarduinoに書き込まれたプログラムからRTCの情報（ポートの数やタイプ）を受け取り，自動的にRTCのインターフェースを変更します．また，他のRTCとarduinoの間の通信はすべて隠ぺいされるため，floatやdoubleなどの型をそのままarduinoと他のRTCの間で通信している感覚でプログラミングが出来ます．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image_rtno1.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image_rtno1-1024x256.jpg" alt="" title="image_rtno1" width="600"  class="aligncenter size-large wp-image-723" /></a></p>
<p>さらに，自分自身がユーザの場合は，他のコンポーネントと通信するポートをarduinoマイコンプログラム上に実装してしまえば，ユーザープログラムを書く必要が無くなります．RTnoを使えば最速のシステム・プロトタイピングが可能です．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image_rtno0.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image_rtno0.jpg" alt="" title="image_rtno0" width="600" class="aligncenter size-full wp-image-724" /></a></p>
<p>もちろん，arduinoは8ビットマイコンのAVRを使っていますから，その限られた性能ではRTnoはリッチ過ぎると思いますが，これからRTミドルウエアに触れるという方や，RTミドルウエアは分かるけど，使えるデバイスが無い，という方には，安価で簡単にI/O制御が出来るデバイスをRTCと簡単に接続できるという点でメリットが大きいと思って作りました．</p>
<p>従って「RTno」はRTミドルウエアのユーザでマイコン等の初心者であれば，arduino初心者のための素晴らしいプログラミングツールとなります．なぜならば，RTコンポーネントのプログラミングにそっくりな方法でプログラミングができ，さらに他のRTコンポーネントとの通信方法を提供することが出来るからです．</p>
<p>また，arduinoユーザにとっては，RTnoはarduinoとPCとの通信を簡単化するツールとなり，より高度で洗練されたRTツールとの接続性を増します．RTCプログラミングへの入門ツールとしても使っていただけるのではないでしょうか？</p>
<p></div>

<div class='postTabs_divs' id='postTabs_1_614'>
<span class='postTabs_titles'><b>ダウンロード</b></span></p>
<p>最新のv3.0がリリースされました．<br />
<H2>RTno (arduino側のライブラリ) </H2><br />
<font color='red'>arduino-1.0でのみサポート．</font><br />
GITHUB: <a href="https://github.com/ysuga/RTno">https://github.com/ysuga/RTno</a></p>
<p><H2>RTnoProxy (PC側の実行ファイル) </H2><br />
GITHUB: <a href="https://github.com/ysuga/RTnoProxy">https://github.com/ysuga/RTnoProxy</a><br />
インストーラ (Win):<br />
OpenRTM-aist 1.1.0 RC3対応:<a href='http://ysuga.net/wp-content/uploads/2011/03/RTnoProxySetup_OpenRTM1.1RC3.zip'>RTnoProxySetup_OpenRTM1.1RC3</a><br />
OpenRTM-aist 1.0 Release対応:<a href='http://ysuga.net/wp-content/uploads/2011/03/RTnoProxySetup_OpenRTM1.0.zip'>RTnoProxySetup_OpenRTM1.0</a><br />
旧バージョン：</p>
<p><a href="http://ysuga.net/wp-content/uploads/2011/03/RTno_Ichi10.zip">RTno_Ichi10</a></p>
<p>インストーラ (Win):<br />
 <a href='http://ysuga.net/wp-content/uploads/2011/03/RTnoProxySetup015.zip'>RTnoProxySetup015.zip</a><br />
<a href='http://ysuga.net/wp-content/uploads/2011/03/RTnoProxySetup014.zip'>RTnoProxySetup014.zip</a><br />
<a href='http://ysuga.net/wp-content/uploads/2011/03/RTnoProxySetup013.zip'>RTnoProxySetup013.zip</a><br />
<a href='http://ysuga.net/wp-content/uploads/2011/03/RTnoProxySetup011.zip'>RTnoProxySetup011</a></p>
<p></div>

<div class='postTabs_divs' id='postTabs_2_614'>
<span class='postTabs_titles'><b>インストール</b></span></p>
<h1>１．arduinoの準備</h1>
<p><a href="http://www.arduino.cc">arduinoの公式サイト</a>から，arduino-1.0をダウンロードし，展開して任意のフォルダに配置してください．僕は通常はCドライブの直下に置いて，デスクトップやスタートメニューにarduino.exeに対するショートカットを配置しています．</p>
<h1>２．OpenRTM-aistの準備</h1>
<p><a href="http://openrtm.org">OpenRTM-aistの公式サイト</a>から，OpenRTM-aist C++版をインストールします．サイトのトップからダウンロードできるインストーラで，すべてインストールされます．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image22.jpg"><img class="aligncenter size-medium wp-image-690" title="image22" src="http://ysuga.net/wp-content/uploads/2011/03/image22-300x210.jpg" alt="" width="300" height="210" /></a></p>
<h1>３．RTnoのダウンロードと展開</h1>
<p>GITHUBよりRTnoをダウンロードします．<br />
<a href="https://github.com/ysuga/RTno">https://github.com/ysuga/RTno</a><br />
GITHUBからダウンロードする場合は，以下の図のリンクからダウンロードします．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image1.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image1.jpg" alt="" title="image1" width="555" height="315" class="aligncenter size-full wp-image-731" /></a></p>
<p>展開すると，ysuga-RTno-XXXX (XXXXはコミットバージョン)が生成されます．<br />
このフォルダの名前をRTnoに変更してください．</p>
<p>RTnoフォルダの直下には以下のファイルがあります．</p>
<ul>
<li> example ・・・ RTnoの実装例 </li>
<li> RTno.h ・・・ RTno本体の宣言 </li>
<li> RTno.cpp ・・・ RTnoのメインルーチン </li>
<li> その他のソースコード </li>
</ul>
<p>ファイルの展開ソフトによっては自動的に中間フォルダが生成されることがありますが，RTnoフォルダの直下にRTno.hなどのファイルがおかれる関係性は大事なので守ってください．</p>
<p>次はこのRTnoフォルダをarduinoで使えるように配置します．</p>
<h1>４．RTnoの準備</h1>
<p>RTnoはarduinoを配置したディレクトリの，librariesのフォルダに置きます．僕なら，<br />
C:\arduino-1.0\libraries\にRTnoフォルダを置きます．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image61.jpg"><img class="aligncenter size-medium wp-image-691" title="image61" src="http://ysuga.net/wp-content/uploads/2011/03/image61-300x255.jpg" alt="" width="300" height="255" /></a></p>
<p>これでarduinoを起動したときに，「sketch」＞「import libraries」から，「RTno」が見られると思います．（RTnoでは，このインポート方法は使いません）</p>
<p><div id="attachment_692" class="wp-caption aligncenter" style="width: 310px"><a href="http://ysuga.net/wp-content/uploads/2011/03/image71.jpg"><img class="size-medium wp-image-692" title="image71" src="http://ysuga.net/wp-content/uploads/2011/03/image71-300x300.jpg" alt="" width="300" height="300" /></a><p class="wp-caption-text">インストールの確認</p></div></p>
<h1>５．RTnoProxyの準備</h1>
<p>WindowsならばMSI形式のインストーラでインストールします．ダウンロードページからダウンロードしてください．スタートメニューの「ysuga_net」-&gt;「RTno」-&gt;「RTnoProxyComp」が実行ファイルへのショートカットです．</p>
<p>GITHUBからソースコードをダウンロードすることが出来ます．<br />
<a href="https://github.com/ysuga/RTnoProxy">https://github.com/ysuga/RTnoProxy</a></p>
<p>WindowsならばVC2008でRTnoProxy.slnを開き，Releaseでビルドしてください．<br />
Linuxならばmakeしてください．binフォルダにあるRTnoProxyCompがRTnoProxyの実行ファイルです．</p>
<p>% unzip src.zip<br />
% cd RTnoProxy20101115<br />
% make</p>
<p>※インストールされたフォルダ（WindowsのバイナリインストールならC:\Program Files\ysuga_net\RTnoProxy内，ソースからコンパイルならコンパイルしたRTnoProxyフォルダ内のbinフォルダ内）には4つのファイルがあります．</p>
<ul>
<li>DataPortTestComp: テスト用コンポーネント</li>
<li>RTnoProxy.conf: COMポート番号を設定するためのコンフィグファイル</li>
<li>RTnoProxyComp: RTnoProxy本体</li>
<li>rtc.conf: rtc.conf．ネームサーバーなどRTCの基本的設定をするためのファイル</li>
</ul>
<p></div>

<div class='postTabs_divs' id='postTabs_3_614'>
<span class='postTabs_titles'><b>使い方</b></span></p>
<h1>１．arduinoマイコンボードへのプログラムの書き込み</h1>
<p>今回はexampleフォルダにあるdigitalInOut.pdeを例にして練習しましょう．</p>
<p>arduinoからexampleフォルダのdigitalInOut.pdeを開きます．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image.jpg"><img class="aligncenter size-medium wp-image-695" title="image" src="http://ysuga.net/wp-content/uploads/2011/03/image-263x300.jpg" alt="" width="263" height="300" /></a></p>
<p>本来はここでソースコードを変更します．<br />
ゼロから開発する場合は，exampleフォルダ内のRTnoTemplate.pdeの名前を変更してから使うとよいでしょう．<br />
このページに少しずつチュートリアルを追加していくので，それをご覧になると，最初の始め方がわかると思います．</p>
<p>ここから書き込みの準備に入ります．</p>
<p>ツール＞SerialPortでシリアルポートの番号を確認します．Windowsの場合はデバイスマネージャを使ってCOMポートの番号を確認してください．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image21.jpg"><img class="aligncenter size-medium wp-image-696" title="image21" src="http://ysuga.net/wp-content/uploads/2011/03/image21-300x204.jpg" alt="" width="300" height="204" /></a><br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image31.jpg"><img class="aligncenter size-medium wp-image-697" title="image31" src="http://ysuga.net/wp-content/uploads/2011/03/image31-300x266.jpg" alt="" width="300" height="266" /></a><br />
またBoardで使用しているarduinoを選択してください．ちなみにこのプログラムはUbuntu9.10とarduino UNOで動作確認しています．</p>
<p>uploadボタンを押すと，自動的にコンパイルが始まり，arduinoにプログラムをアップロードします．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image4.jpg"><img class="aligncenter size-medium wp-image-698" title="image4" src="http://ysuga.net/wp-content/uploads/2011/03/image4-300x155.jpg" alt="" width="300" height="155" /></a></p>
<p>書き込みが終わると自動的にリセットされます．リセットされた状態でRTnoが書き込まれたarduinoマイコンボードは，PC側のRTnoProxyの実行を待っています．</p>
<h1>２．RTnoProxyの設定</h1>
<p>まず，arduinoがつながっているシリアルポートをRTnoProxyに読み込ませるための設定をします．<br />
RTnoProxyをインストールしたフォルダ（WinならC:\Program Files\ysuga_net\RTnoProxy内，LinuxならコンパイルしたRTnoProxyフォルダ内のbinフォルダ内）の中の&#8221;RTnoProxy.conf&#8221;を変更します．通常は以下のようになっています．</p>
<pre>
  #conf.default.comport:\\\\.\\COM4
  conf.baudrate: 19200
  conf.default.comport:/dev/ttyACM2
</pre>
<p>＃はコメント行です．<br />
Windowsで使う場合は，1行目の＃をはずし，適切なCOMポート番号を，デバイスマネージャで確認して設定してください．逆に最後の行はコメントにします．<br />
(\\\\.\\というエスケープ文字列は大事です．COM9より大きい値を設定するための文字列です．）<br />
Linuxの場合も同様で，dmesgコマンドなどで確認してください．</p>
<p>新しいバージョンより，ボーレートを変更出来るようになりました．<br />
これはRTno (arduinoデバイス) 側と同じ値にする必要があります．通常は変更しないほうが良いと思いますが，XBeeとArduino FIOを使った無線通信＆書き込みの場合は，適宜変更すると便利です．近いうちに無線で使う方法についてチュートリアルをアップします(2011/04/27)</p>
<p>＊注意：<br />
Windows 7とVistaのユーザには，設定ファイルがProgram Filesフォルダ内にあるので，UACに保護されてしまい，変更できません（できても仮想化されてしまって読みこめないのです）</p>
<p>解１）　お使いのテキストエディタを管理者権限で実行し，それから設定ファイルを開いて変更します．<br />
解２）　UACを止めて編集します．<br />
解３）　設定ファイルをデスクトップなどにコピーし，元のファイルを削除します．デスクトップ上で変更した上で，再度，プログラムフォルダにコピーします．</p>
<p>UACをとめちゃうのがシンプルですが，頻繁に変更しなければ解３が以外とオススメです．</p>
<h1>３．RTnoProxyの起動</h1>
<p>RTnoProxyはRTコンポーネントです．まずは，インストールしたネームサービスを起動します．Windowsならば，スタートメニューから，「OpenRTM-aist」＞「C++」＞「tools」＞「Start Naming Service」で起動します．<br />
Linuxならばrtm-namingコマンドで起動します．引数としてポート番号を指定するのですが，デフォルトの2809はomniORBがデフォルトで使っているので使いにくいです．9999などを指定しましょう．異なるポート番号を使う場合は，RTnoProxyのrtc.confを適宜変更する必要があります(後述）．</p>
<p>ネームサーバーが実行されると，プロンプトに下図のような表示があります．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image6.jpg"><img class="aligncenter size-medium wp-image-699" title="image6" src="http://ysuga.net/wp-content/uploads/2011/03/image6-300x172.jpg" alt="" width="300" height="172" /></a></p>
<p>次に，RTnoProxyCompの設定を行います．先ほどのRTnoProxy.confと同じフォルダにrtc.confというRTコンポーネント用の設定ファイルがありますので，これを編集します．</p>
<p>corba.nameservers:127.0.0.1:2809<br />
exec_cxt.periodic.rate:100.0<br />
Test.RTnoProxy.config_file: RTnoProxy.conf<br />
logger.enable:NO</p>
<p>大事なのは&#8221;corba.nameservers&#8221;と，&#8221;exec_cxt.periodic.rate&#8221;の値で，それぞれ，ネームサーバーのIPアドレス:ポート番号と，実行周期（単位Hz）を表しています．Linuxユーザの方は，先ほど変更したポート番号に変更するのが良いでしょう．IPアドレスと「：（コンマ）」で区切って入力してください．<br />
＊やはり上記のRTnoProxy.confと同様にWin7やVistaを使っている方々にはUACの問題で変更が面倒です．すみません．</p>
<p>これで準備OKなので，RTnoProxyCompを実行します．実行に成功するとOpening SerialPort(COM*)&#8230;OK.と表示され，3秒停止後に，onInitializeが呼ばれます．この中でarduinoと通信しながら初期化処理が行われます．DigitalInOutでは，L型（TimedLongSeq)のin0というInPortとout0というOutPortが追加されたのが分かります．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image20.jpg"><img class="aligncenter size-medium wp-image-700" title="image20" src="http://ysuga.net/wp-content/uploads/2011/03/image20-300x185.jpg" alt="" width="300" height="185" /></a></p>
<p>もしRTnoProxyを再起動した場合，Windowsの場合は，COMオープン時にarduinoにリセットがかかりませんので，手動でResetボタンを押すか，抜き差しを行って下さい．</p>
<h1>４．RTnoProxyのテスト</h1>
<p>RT System Editorを起動します．Windows版ならばOpenRTM-aistと同時にインストールされていますので，toolsの中から選択すると良いでしょう． Linuxをお使いの場合は<a href="http://openrtm.org">オフィシャルサイト</a>よりダウンロードしてください．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image111.jpg"><img class="aligncenter size-medium wp-image-701" title="image111" src="http://ysuga.net/wp-content/uploads/2011/03/image111-300x187.jpg" alt="" width="300" height="187" /></a></p>
<p>RT System Editorの画面です．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image32.jpg"><img class="aligncenter size-medium wp-image-702" title="image32" src="http://ysuga.net/wp-content/uploads/2011/03/image32-300x201.jpg" alt="" width="300" height="201" /></a></p>
<p>まず，ネームサーバーに接続します（多くの場合はデフォルトの2809番ポートでネームサービスが動いていれば，起動時に自動的に接続されます）．下の図のボタンを押します．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image41.jpg"><img class="aligncenter size-medium wp-image-703" title="image41" src="http://ysuga.net/wp-content/uploads/2011/03/image41-300x142.jpg" alt="" width="300" height="142" /></a></p>
<p>先ほど指定したIPアドレスとポート番号を設定してください．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image5.jpg"><img class="aligncenter size-medium wp-image-704" title="image5" src="http://ysuga.net/wp-content/uploads/2011/03/image5-300x146.jpg" alt="" width="300" height="146" /></a></p>
<p>すると下図のようにネームサーバーが追加されます．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image7.jpg"><img class="aligncenter size-medium wp-image-705" title="image7" src="http://ysuga.net/wp-content/uploads/2011/03/image7-300x185.jpg" alt="" width="300" height="185" /></a></p>
<p>RTnoProxyが実行されていると，下図のようになります．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image8.jpg"><img class="aligncenter size-medium wp-image-706" title="image8" src="http://ysuga.net/wp-content/uploads/2011/03/image8-300x213.jpg" alt="" width="300" height="213" /></a></p>
<p>さらに同時にインストールされているDataPortTestCompを実行してください．Linuxユーザの方は同じbinフォルダにあります．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image9.jpg"><img class="aligncenter size-medium wp-image-707" title="image9" src="http://ysuga.net/wp-content/uploads/2011/03/image9-300x196.jpg" alt="" width="300" height="196" /></a></p>
<p>さて，これで準備が整いました．Fileから「Open New System Editor」を選択するか，「ON」の表示のボタンをクリックして，新しいSystem Editorを開きます．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image10.jpg"><img class="aligncenter size-medium wp-image-708" title="image10" src="http://ysuga.net/wp-content/uploads/2011/03/image10-300x200.jpg" alt="" width="300" height="200" /></a></p>
<p>左のメニューのDataPortTest0とRTnoProxy0をSystem Editorにドラッグ＆ドロップしてください．RTnoProxyの構造を確認し，所望のポートが追加されていることがわかります．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image12.jpg"><img class="aligncenter size-medium wp-image-709" title="image12" src="http://ysuga.net/wp-content/uploads/2011/03/image12-300x142.jpg" alt="" width="300" height="142" /></a></p>
<p>次にポートを接続します．DigitalInOutを使ったRTnoは，TimedLongSeq型の入力，出力ポートを一つずつ持っていますので，DataPortTest側も同じタイプのポートを接続してやります．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image15.jpg"><img class="aligncenter size-medium wp-image-710" title="image15" src="http://ysuga.net/wp-content/uploads/2011/03/image15-300x177.jpg" alt="" width="300" height="177" /></a></p>
<p>ドロップすると表示されるダイアログは，DataFlowがpushになっていることを確認してOKでいいです．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image16.jpg"><img class="aligncenter size-medium wp-image-711" title="image16" src="http://ysuga.net/wp-content/uploads/2011/03/image16-300x277.jpg" alt="" width="300" height="277" /></a></p>
<p>同様にRTnoProxyの出力ポートも接続します．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image17.jpg"><img class="aligncenter size-medium wp-image-712" title="image17" src="http://ysuga.net/wp-content/uploads/2011/03/image17-300x234.jpg" alt="" width="300" height="234" /></a></p>
<p>んで，Activateします．個別に右クリックしてactivateを選択するか，みどり三角形の再生ボタンをクリックします．Activateに成功すると，下図のようにRTCが緑色になります．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image19.jpg"><img class="aligncenter size-medium wp-image-713" title="image19" src="http://ysuga.net/wp-content/uploads/2011/03/image19-300x216.jpg" alt="" width="300" height="216" /></a></p>
<p>さて，この時点で，arduinoを見ると，RXとTXに対応したLEDが点滅しており，PCとの間で激しく通信している事がわかります．RTnoProxyの実行に合わせてarduino側とデータを同期しているからです</p>
<p>DataPortTestCompの画面を見ると，LongSeqの列に6つのデータが来ていますが，これはarduinoの2番ピンから7番ピンまでの入力です．ここにスイッチなどをつなぐと，値が変化するのが確認出来るはずです．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image211.jpg"><img class="aligncenter size-medium wp-image-714" title="image211" src="http://ysuga.net/wp-content/uploads/2011/03/image211-300x265.jpg" alt="" width="300" height="265" /></a></p>
<p>もしお使いのarduinoボードが「arduino UNO」ならば13番ピンにLEDが付いているので，これを点灯させてみましょう．</p>
<p>まず，キーボードから「L」を打ちます（Shiftを押しながら「Lキー」）．ちょっと効きづらいときがありますが，何度かやってみてください．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image23.jpg"><img class="aligncenter size-full wp-image-715" title="image23" src="http://ysuga.net/wp-content/uploads/2011/03/image23.jpg" alt="" width="288" height="180" /></a></p>
<p>ここでDataPortTestの出力データの要素数を選択します．入力欄を6にしてください．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image24.jpg"><img class="aligncenter size-full wp-image-716" title="image24" src="http://ysuga.net/wp-content/uploads/2011/03/image24.jpg" alt="" width="256" height="172" /></a></p>
<p>んで，「Enter」をおし，6個の数字を入力＆Enterします．ここでは，1[Enter]1[Enter]1[Enter]1[Enter]1[Enter]1[Enter]と入れます．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image25.jpg"><img class="aligncenter size-full wp-image-717" title="image25" src="http://ysuga.net/wp-content/uploads/2011/03/image25.jpg" alt="" width="200" height="253" /></a></p>
<p>最後の数値を入力すると，直ちにarduinoにデータが送信され，LEDが点くはずです．「ゼロ」を6個送信するとLEDは消えます．</p>
<p>この値は8番ピンから13番ピンの出力に対応しています．他のピンにもLEDを取り付けてみてください．</p>
<h1>digitalInOutのソースコード解説</h1>
<h1>Digital Input/Output</h1>
<p>DigtalInOutの例を解説します．</p>
<p>まずはソースコード全文をお見せします．</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/**
 * digitalInOut.pde
 * RTno is RT-middleware and arduino.
 *
 * Using RTno, arduino device can communicate any RT-components
 *  through the RTno-proxy component which is launched in PC.
 * Connect arduino with USB, and program with RTno library.
 * You do not have to define any protocols to establish communication
 *  between arduino and PC.
 *
 * Using RTno, you must not define the function &quot;setup&quot; and &quot;loop&quot;.
 * Those functions are automatically defined in the RTno libarary.
 * You, developers, must define following functions:
 *  int onInitialize(void);
 *  int onActivated(void);
 *  int onDeactivated(void);
 *  int onExecute(void);
 *  int onError(void);
 *  int onReset(void);
 * These functions are spontaneously called by the RTno-proxy
 *  RT-component which is launched in the PC.
 */</span>
&nbsp;
<span style="color: #339900;">#include &amp;lt;RTno.h&amp;gt;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/**
 * This function is called at first.
 * conf._default.baudrate: baudrate of serial communication
 * exec_cxt.periodic.type: reserved but not used.
 */</span>
<span style="color: #0000ff;">void</span> rtcconf<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
  conf._default.<span style="color: #007788;">baudrate</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">19200</span><span style="color: #008080;">;</span>
  exec_cxt.<span style="color: #007788;">periodic</span>.<span style="color: #007788;">type</span> <span style="color: #000080;">=</span> ProxySynchronousExecutionContext<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #ff0000; font-style: italic;">/**
 * Declaration Division:
 *
 * DataPort and Data Buffer should be placed here.
 *
 * Currently, following 6 types are available.
 * TimedLong:
 * TimedDouble:
 * TimedFloat:
 * TimedLongSeq:
 * TimedDoubleSeq:
 * TimedFloatSeq:
 *
 * Please refer following comments. If you need to use some ports,
 * uncomment the line you want to declare.
 **/</span>
TimedLongSeq in0<span style="color: #008080;">;</span>
InPort in0In<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;in0&quot;</span>, in0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
TimedLongSeq out0<span style="color: #008080;">;</span>
OutPort out0Out<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;out0&quot;</span>, out0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
<span style="color: #666666;">//////////////////////////////////////////</span>
<span style="color: #666666;">// on_initialize</span>
<span style="color: #666666;">//</span>
<span style="color: #666666;">// This function is called in the initialization</span>
<span style="color: #666666;">// sequence. The sequence is triggered by the</span>
<span style="color: #666666;">// PC. When the RTnoRTC is launched in the PC,</span>
<span style="color: #666666;">// then, this function is remotely called</span>
<span style="color: #666666;">// through the USB cable.</span>
<span style="color: #666666;">// In on_initialize, usually DataPorts are added.</span>
<span style="color: #666666;">//</span>
<span style="color: #666666;">//////////////////////////////////////////</span>
<span style="color: #0000ff;">int</span> RTno<span style="color: #008080;">::</span><span style="color: #007788;">onInitialize</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
  <span style="color: #ff0000; font-style: italic;">/* Data Ports are added in this section.
  */</span>
  addInPort<span style="color: #008000;">&#40;</span>in0In<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  addOutPort<span style="color: #008000;">&#40;</span>out0Out<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
  <span style="color: #666666;">// Some initialization (like port direction setting)</span>
  <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i <span style="color: #000040;">&amp;</span>lt<span style="color: #008080;">;</span> <span style="color: #0000dd;">6</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    pinMode<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">2</span><span style="color: #000040;">+</span>i, INPUT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
  <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i <span style="color: #000040;">&amp;</span>lt<span style="color: #008080;">;</span> <span style="color: #0000dd;">6</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    pinMode<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">8</span><span style="color: #000040;">+</span>i, OUTPUT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
&nbsp;
  <span style="color: #0000ff;">return</span> RTC_OK<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">////////////////////////////////////////////</span>
<span style="color: #666666;">// on_activated</span>
<span style="color: #666666;">// This function is called when the RTnoRTC</span>
<span style="color: #666666;">// is activated. When the activation, the RTnoRTC</span>
<span style="color: #666666;">// sends message to call this function remotely.</span>
<span style="color: #666666;">// If this function is failed (return value</span>
<span style="color: #666666;">// is RTC_ERROR), RTno will enter ERROR condition.</span>
<span style="color: #666666;">////////////////////////////////////////////</span>
<span style="color: #0000ff;">int</span> RTno<span style="color: #008080;">::</span><span style="color: #007788;">onActivated</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
  <span style="color: #666666;">// Write here initialization code.</span>
&nbsp;
  <span style="color: #0000ff;">return</span> RTC_OK<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">/////////////////////////////////////////////</span>
<span style="color: #666666;">// on_deactivated</span>
<span style="color: #666666;">// This function is called when the RTnoRTC</span>
<span style="color: #666666;">// is deactivated.</span>
<span style="color: #666666;">/////////////////////////////////////////////</span>
<span style="color: #0000ff;">int</span> RTno<span style="color: #008080;">::</span><span style="color: #007788;">onDeactivated</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
  <span style="color: #666666;">// Write here finalization code.</span>
&nbsp;
  <span style="color: #0000ff;">return</span> RTC_OK<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">//////////////////////////////////////////////</span>
<span style="color: #666666;">// This function is repeatedly called when the</span>
<span style="color: #666666;">// RTno is in the ACTIVE condition.</span>
<span style="color: #666666;">// If this function is failed (return value is</span>
<span style="color: #666666;">// RTC_ERROR), RTno immediately enter into the</span>
<span style="color: #666666;">// ERROR condition.r</span>
<span style="color: #666666;">//////////////////////////////////////////////</span>
<span style="color: #0000ff;">int</span> RTno<span style="color: #008080;">::</span><span style="color: #007788;">onExecute</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
&nbsp;
  <span style="color: #ff0000; font-style: italic;">/*
   * Input digital data
   */</span>
  <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>in0In.<span style="color: #007788;">isNew</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    in0In.<span style="color: #007788;">read</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i <span style="color: #000040;">&amp;</span>lt<span style="color: #008080;">;</span> in0.<span style="color: #007788;">data</span>.<span style="color: #007788;">length</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;</span>amp<span style="color: #008080;">;</span><span style="color: #000040;">&amp;</span>amp<span style="color: #008080;">;</span> i <span style="color: #000040;">&amp;</span>lt<span style="color: #008080;">;</span> <span style="color: #0000dd;">6</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
      digitalWrite<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">8</span><span style="color: #000040;">+</span>i, in0.<span style="color: #007788;">data</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
  <span style="color: #008000;">&#125;</span>
&nbsp;
  <span style="color: #ff0000; font-style: italic;">/*
   * Output digital data in Voltage unit.
   */</span>
  out0.<span style="color: #007788;">data</span>.<span style="color: #007788;">length</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">6</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i <span style="color: #000040;">&amp;</span>lt<span style="color: #008080;">;</span> <span style="color: #0000dd;">6</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    out0.<span style="color: #007788;">data</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> digitalRead<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">2</span><span style="color: #000040;">+</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
  out0Out.<span style="color: #007788;">write</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
  <span style="color: #0000ff;">return</span> RTC_OK<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">//////////////////////////////////////</span>
<span style="color: #666666;">// on_error</span>
<span style="color: #666666;">// This function is repeatedly called when</span>
<span style="color: #666666;">// the RTno is in the ERROR condition.</span>
<span style="color: #666666;">// The ERROR condition can be recovered,</span>
<span style="color: #666666;">// when the RTno is reset.</span>
<span style="color: #666666;">///////////////////////////////////////</span>
<span style="color: #0000ff;">int</span> RTno<span style="color: #008080;">::</span><span style="color: #007788;">onError</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
  <span style="color: #0000ff;">return</span> RTC_OK<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #666666;">////////////////////////////////////////</span>
<span style="color: #666666;">// This function is called when</span>
<span style="color: #666666;">// the RTno is reset. If on_reset is</span>
<span style="color: #666666;">// succeeded, the RTno will enter into</span>
<span style="color: #666666;">// the INACTIVE condition. If failed</span>
<span style="color: #666666;">// (return value is RTC_ERROR), RTno</span>
<span style="color: #666666;">// will stay in ERROR condition.ec</span>
<span style="color: #666666;">///////////////////////////////////////</span>
<span style="color: #0000ff;">int</span> RTno<span style="color: #008080;">::</span><span style="color: #007788;">onReset</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span>
<span style="color: #008000;">&#123;</span>
  <span style="color: #0000ff;">return</span> RTC_OK<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>まず冒頭でrtcconf関数を定義しています．この関数はRTnoデバイスの基本的な設定を行う部分で，現状は通信のボーレート設定に使います．</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #ff0000; font-style: italic;">/**
 * This function is called at first.
 * conf._default.baudrate: baudrate of serial communication
 * exec_cxt.periodic.type: reserved but not used.
 */</span>
<span style="color: #0000ff;">void</span> rtcconf<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
  conf._default.<span style="color: #007788;">baudrate</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">19200</span><span style="color: #008080;">;</span>
  exec_cxt.<span style="color: #007788;">periodic</span>.<span style="color: #007788;">type</span> <span style="color: #000080;">=</span> ProxySynchronousExecutionContext<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>デフォルトではボーレートは19200になっています．exec_cxt.periodic.typeは周期実行のタイプの設定ですが，現状では使っていません．いずれ対応予定です (2011/04/27)</p>
<p>次にグローバルスコープでInPortとOutPort，およびデータを受けるバッファを宣言しています．</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">TimedLongSeq in0<span style="color: #008080;">;</span>
InPort in0In<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;in0&quot;</span>, in0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
TimedLongSeq out0<span style="color: #008080;">;</span>
OutPort out0Out<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;out0&quot;</span>, out0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span></pre></div></div>

<p>次にonInitializeでは，このポートを追加しています．さらに，ピンの入出力設定を行っています．2番ピンから7番ピンまでの6本がINPUTで，8番から13番まではOUTPUTです．</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;">  addInPort<span style="color: #008000;">&#40;</span>in0In<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  addOutPort<span style="color: #008000;">&#40;</span>out0Out<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
  <span style="color: #666666;">// Some initialization (like port direction setting)</span>
  <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i <span style="color: #000040;">&amp;</span>lt<span style="color: #008080;">;</span> <span style="color: #0000dd;">6</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    pinMode<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">2</span><span style="color: #000040;">+</span>i, INPUT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
  <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i <span style="color: #000040;">&amp;</span>lt<span style="color: #008080;">;</span> <span style="color: #0000dd;">6</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    pinMode<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">8</span><span style="color: #000040;">+</span>i, OUTPUT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span></pre></div></div>

<p>onActivatedとonDeactivatedでは何もしていませんが，ここにも初期化処理などを記述することが出来ます．</p>
<p>そしてonExecuteにメインの周期的な処理を記述します．</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #0000ff;">int</span> RTno<span style="color: #008080;">::</span><span style="color: #007788;">onExecute</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
&nbsp;
  <span style="color: #ff0000; font-style: italic;">/*
   * Input digital data
   */</span>
  <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>in0In.<span style="color: #007788;">isNew</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    in0In.<span style="color: #007788;">read</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i <span style="color: #000040;">&amp;</span>lt<span style="color: #008080;">;</span> in0.<span style="color: #007788;">data</span>.<span style="color: #007788;">length</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;</span>amp<span style="color: #008080;">;</span><span style="color: #000040;">&amp;</span>amp<span style="color: #008080;">;</span> i <span style="color: #000040;">&amp;</span>lt<span style="color: #008080;">;</span> <span style="color: #0000dd;">6</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
      digitalWrite<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">8</span><span style="color: #000040;">+</span>i, in0.<span style="color: #007788;">data</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
    <span style="color: #008000;">&#125;</span>
  <span style="color: #008000;">&#125;</span>
&nbsp;
  <span style="color: #ff0000; font-style: italic;">/*
   * Output digital data in Voltage unit.
   */</span>
  out0.<span style="color: #007788;">data</span>.<span style="color: #007788;">length</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">6</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i <span style="color: #000040;">&amp;</span>lt<span style="color: #008080;">;</span> <span style="color: #0000dd;">6</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    out0.<span style="color: #007788;">data</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> digitalRead<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">2</span><span style="color: #000040;">+</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
  <span style="color: #008000;">&#125;</span>
  out0Out.<span style="color: #007788;">write</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>
&nbsp;
  <span style="color: #0000ff;">return</span> RTC_OK<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>ここではin0Inのポートに入力してきたデータを，そのままdigitalWriteしています．さらにdigitalReadしたデータ（１か０）を，out0Outポートから出力しています．</p>
<hr />
</div>

<div class='postTabs_divs' id='postTabs_4_614'>
<span class='postTabs_titles'><b>リンク</b></span></p>
<p>Arduino公式サイト <a href="http://www.arduino.cc/">http://www.arduino.cc/</a></p>
<p>OpenRTM-aist公式サイト <a href="http://openrtm.org">openrtm.org</a></p>
<p></div>

<div class='postTabs_divs' id='postTabs_5_614'>
<span class='postTabs_titles'><b>【入門】digitalInOutの自作</b></span><br />
<H1>まず回路を作ります</H1></p>
<p>御用意するのは</p>
<ul>
<li>Arduino UNO</li>
<li>ブレッドボード</li>
<li>LED</li>
<li>抵抗470Ω</li>
<li>タクトスイッチ</li>
<li>ジャンパー線</li>
</ul>
<p>Arduino入門みたいなセットに入ってたりしますね．→の「Arduinoをはじめようキット」だと全部そろうと思いますよ．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image11.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image11.jpg" alt="" title="DSC_0059" width="480" height="360" class="aligncenter size-full wp-image-801" /></a></p>
<p>LEDは足が長い方が＋になると光ります．抵抗は足を曲げておきます．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image2.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image2.jpg" alt="" title="DSC_0059" width="480" height="360" class="aligncenter size-full wp-image-802" /></a></p>
<p>下図のように抵抗とLEDをさします．抵抗をさし，抵抗の横の穴にLEDの長い方の足をさします．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image3.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image3.jpg" alt="" title="DSC_0063" width="480" height="360" class="aligncenter size-full wp-image-803" /></a></p>
<p>抵抗の他方を5V端子に繋ぎます．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image42.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image42.jpg" alt="" title="DSC_0066" width="480" height="360" class="aligncenter size-full wp-image-804" /></a></p>
<p>LEDの反対側の足と，Arduinoの8番ピンを繋ぎました<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image51.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image51.jpg" alt="" title="DSC_0069" width="480" height="360" class="aligncenter size-full wp-image-805" /></a></p>
<p>スイッチをブレッドボードに付けます<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image62.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image62.jpg" alt="" title="DSC_0072" width="480" height="360" class="aligncenter size-full wp-image-806" /></a></p>
<p>スイッチの片側はGND，反対側は2番ピンに入れました<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image72.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image72.jpg" alt="" title="DSC_0076" width="480" height="360" class="aligncenter size-full wp-image-807" /></a></p>
<p>図で表すとこんな感じ．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image73.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image73.jpg" alt="" title="image7" width="324" height="380" class="aligncenter size-full wp-image-809" /></a></p>
<p><H1>プログラム</H1></p>
<p>Arduinoを起動します．</p>
<p>RTnoがインストールされているとします．</p>
<p>まずはOpenボタンで<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image81.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image81.jpg" alt="" title="image8" width="480" height="320" class="aligncenter size-full wp-image-810" /></a></p>
<p>RTnoTemplateのファイルを開きます<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image91.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image91.jpg" alt="" title="image9" width="480" height="600" class="aligncenter size-full wp-image-811" /></a></p>
<p>別の名前で保存します．ここはmyDigitalInOutと名前を付けました．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image101.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image101.jpg" alt="" title="image10" width="480" height="390" class="aligncenter size-full wp-image-812" /></a></p>
<p>んで，ファイルを編集．コメントとかは省略してあります．</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">#include &lt;RTno.h&gt;</span>
&nbsp;
<span style="color: #0000ff;">void</span> rtcconf<span style="color: #008000;">&#40;</span><span style="color: #0000ff;">void</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
  conf._default.<span style="color: #007788;">baudrate</span> <span style="color: #000080;">=</span> <span style="color: #0000dd;">57600</span><span style="color: #008080;">;</span>
  exec_cxt.<span style="color: #007788;">periodic</span>.<span style="color: #007788;">type</span> <span style="color: #000080;">=</span> ProxySynchronousExecutionContext<span style="color: #008080;">;</span>
<span style="color: #008000;">&#125;</span>
&nbsp;
TimedLongSeq in0<span style="color: #008080;">;</span> <span style="color: #666666;">// 入力データの入る変数</span>
InPort in0In<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;in0&quot;</span>, in0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// 入力ポートの宣言．onInitializeで追加しないとだめ</span>
&nbsp;
TimedLongSeq out0<span style="color: #008080;">;</span> <span style="color: #666666;">// 出力データを入れるための変数</span>
OutPort out0Out<span style="color: #008000;">&#40;</span><span style="color: #FF0000;">&quot;out0&quot;</span>, out0<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// 出力ポート．これも追加処理が必要</span>
&nbsp;
<span style="color: #0000ff;">int</span> RTno<span style="color: #008080;">::</span><span style="color: #007788;">onInitialize</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
  <span style="color: #ff0000; font-style: italic;">/* Data Ports are added in this section.  */</span>
  addInPort<span style="color: #008000;">&#40;</span>in0In<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// 入力ポートの追加</span>
  addOutPort<span style="color: #008000;">&#40;</span>out0Out<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// 出力ポートの追加</span>
&nbsp;
  <span style="color: #666666;">// Some initialization (like port direction setting)</span>
  <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">6</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    pinMode<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">2</span><span style="color: #000040;">+</span>i, INPUT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>   <span style="color: #666666;">// 2～7ピンを入力ピンに設定</span>
    digitalWrite<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">2</span><span style="color: #000040;">+</span>i, HIGH<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// ここで内部プルアップをONに</span>
  <span style="color: #008000;">&#125;</span>
  <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">6</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    pinMode<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">8</span><span style="color: #000040;">+</span>i, OUTPUT<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// 8～13番ピンを出力に設定</span>
  <span style="color: #008000;">&#125;</span>
&nbsp;
  <span style="color: #0000ff;">return</span> RTC_OK<span style="color: #008080;">;</span> 
<span style="color: #008000;">&#125;</span>
&nbsp;
<span style="color: #0000ff;">int</span> RTno<span style="color: #008080;">::</span><span style="color: #007788;">onExecute</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
&nbsp;
  <span style="color: #ff0000; font-style: italic;">/* Input digital data  */</span>
  <span style="color: #0000ff;">if</span><span style="color: #008000;">&#40;</span>in0In.<span style="color: #007788;">isNew</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> <span style="color: #666666;">// データが来ていたらIf文に入る</span>
    in0In.<span style="color: #007788;">read</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// ここでようやく読み込む</span>
    <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i <span style="color: #000080;">&lt;</span> in0.<span style="color: #007788;">data</span>.<span style="color: #007788;">length</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span> <span style="color: #000040;">&amp;&amp;</span> i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">6</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span> <span style="color: #666666;">// length関数でシーケンス配列の長さが分かるので</span>
      digitalWrite<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">8</span><span style="color: #000040;">+</span>i, in0.<span style="color: #007788;">data</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span>  <span style="color: #666666;">// 配列形式でアクセスできます</span>
    <span style="color: #008000;">&#125;</span>
  <span style="color: #008000;">&#125;</span>
&nbsp;
&nbsp;
  <span style="color: #ff0000; font-style: italic;">/* Output digital data in Voltage unit. */</span>
  out0.<span style="color: #007788;">data</span>.<span style="color: #007788;">length</span><span style="color: #008000;">&#40;</span><span style="color: #0000dd;">6</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// length関数に引数を与えるとシーケンス配列の長さを設定できる</span>
  <span style="color: #0000ff;">for</span><span style="color: #008000;">&#40;</span><span style="color: #0000ff;">int</span> i <span style="color: #000080;">=</span> <span style="color: #0000dd;">0</span><span style="color: #008080;">;</span>i <span style="color: #000080;">&lt;</span> <span style="color: #0000dd;">6</span><span style="color: #008080;">;</span>i<span style="color: #000040;">++</span><span style="color: #008000;">&#41;</span> <span style="color: #008000;">&#123;</span>
    out0.<span style="color: #007788;">data</span><span style="color: #008000;">&#91;</span>i<span style="color: #008000;">&#93;</span> <span style="color: #000080;">=</span> digitalRead<span style="color: #008000;">&#40;</span><span style="color: #0000dd;">2</span><span style="color: #000040;">+</span>i<span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// 配列にデータを代入して</span>
  <span style="color: #008000;">&#125;</span>
  out0Out.<span style="color: #007788;">write</span><span style="color: #008000;">&#40;</span><span style="color: #008000;">&#41;</span><span style="color: #008080;">;</span> <span style="color: #666666;">// ここでデータを出力ポートから排出</span>
&nbsp;
  <span style="color: #0000ff;">return</span> RTC_OK<span style="color: #008080;">;</span> 
<span style="color: #008000;">&#125;</span></pre></div></div>

<p>さてうごくでしょうか？試してみます．</p>
<p><H1>書き込み</H1><br />
Arduinoのボードを選択します．「Tools」＞「Board」＞「Arduino UNO」を選びます．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image112.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image112.jpg" alt="" title="image11" width="480" height="360" class="aligncenter size-full wp-image-814" /></a></p>
<p>Arduinoボードが接続されているCOMポートを選びます．デバイスマネージャで確認してみて下さい<a href="http://ysuga.net/wp-content/uploads/2011/03/image121.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image121.jpg" alt="" title="image12" width="480" height="300" class="aligncenter size-full wp-image-815" /></a></p>
<p>アップロードします．アップロードボタンを押してください<a href="http://ysuga.net/wp-content/uploads/2011/03/image13.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image13.jpg" alt="" title="image13" width="480" height="220" class="aligncenter size-full wp-image-816" /></a></p>
<p>Done Uploadingと出ればOKです．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image14.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image14.jpg" alt="" title="image14" width="480" height="270" class="aligncenter size-full wp-image-819" /></a></p>
<p><H1>テスト</H1><br />
RTnoProxyがバイナリからインストールされているとします．</p>
<p>（図は後日追加しますー）</p>
<p>1. NameServerを起動します．<br />
2．スタート > プログラム > ysuga_net > RTno > RTnoProxy.confを変更して，Arduino UNOが接続されているCOMポートを選択します．</p>

<div class="wp_syntax"><div class="code"><pre class="cpp" style="font-family:monospace;"><span style="color: #339900;">############# RTnoProxy.conf ###########</span>
conf.<span style="color: #0000ff;">default</span>.<span style="color: #007788;">comport</span><span style="color: #008080;">:</span>\\\\.\\COM10
conf.<span style="color: #0000ff;">default</span>.<span style="color: #007788;">baudrate</span><span style="color: #008080;">:</span><span style="color: #0000dd;">57600</span>
<span style="color: #339900;">#conf.default.comport:/dev/ttyACM0</span>
<span style="color: #339900;">####################################</span></pre></div></div>

<p>3. スタート > プログラム > ysuga_net > RTno > RTnoProxyComp.exeを実行します．<br />
4. スタート > プログラム > ysuga_net > RTno > DataPortTestComp.exeを実行します．<br />
5. スタート > プログラム > OpenRTM-aist > C++ >  tools > RT System Editorを起動します．<br />
6. File > New Online System Editorを選択して，エディタを開きます．下図のボタンでもOK．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image14a.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image14a.jpg" alt="" title="image14a" width="252" height="235" class="aligncenter size-full wp-image-821" /></a></p>
<p>7. NameServiceビューから，RTnoProxy0.rtcとDataPortTest0.rtcを，System Editorにドラッグ＆ドロップします<br />
8. TimedLongSeq型のポート同士をつなぎます．<br />
<a href="http://ysuga.net/wp-content/uploads/2011/03/image151.jpg"><img src="http://ysuga.net/wp-content/uploads/2011/03/image151.jpg" alt="" title="image15" width="480" height="180" class="aligncenter size-full wp-image-822" /></a></p>
<p>9. すべてActivateします<br />
10. DataPortTestのウィンドウで「大文字のL」を入力してEnterすると，TimedLongSeq型のデータ送信モードになります<br />
11. 最初にデータの数（ここでは6）を入力<br />
12. 次に数字を入力してEnter（これを6回くりかえす）．<br />
13．6回目を送信するとデータが送信される．<br />
14．「0 0 0 0 0 0」を送るとLEDは点灯．「1 1 1 1 1 1」を送るとLEDは消えます<br />
15. DataPortTestのウィンドウで「v」を入力してEnterするとデータポートに入力されたデータが表示されます．<br />
16. スイッチを押しながら「v」するのと，スイッチを話しながら「v」するのを比べてください．</p>
<p></div>

</p>
<script type='text/javascript'>jQuery(document).ready(function() { if(postTabs_getCookie('postTabs_614')) postTabs_show(postTabs_getCookie('postTabs_614'),614); });</script>]]></content:encoded>
			<wfw:commentRss>http://ysuga.net/robot/rtm/rtc/rtno/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>DirectX対応ジョイスティックRTC</title>
		<link>http://ysuga.net/robot/rtm/rtc/directinput</link>
		<comments>http://ysuga.net/robot/rtm/rtc/directinput#comments</comments>
		<pubDate>Fri, 18 Feb 2011 10:21:34 +0000</pubDate>
		<dc:creator>ysuga</dc:creator>
				<category><![CDATA[RTコンポーネント]]></category>

		<guid isPermaLink="false">http://ysuga.net/?p=608</guid>
		<description><![CDATA[DirectX に対応したジョイスティックで操作するためのRTCです． Windowsで認識するほとんどすべてのジョイスティックが使えます． 僕は下記のXBox360用コントローラで動作確認しています．これ，両親指にアナログ入力があって，LRキーもアナログなので移動ロボットの制御とかに便利です． DirectXとは DirectXはMicrosoft Windows上でゲームなどで使用するマルチメディア機能を活用するためのライブラリで，Direct3D DirectShow DirectInput DirectMusicなどなどの集まりからなっています． ジョイスティックなどのゲーミングデバイスをつかさどるのはDirectInputというモジュールです． これを使えば様々なコントローラを共通のインターフェースに基づいてプログラミングできるのが特徴です．これはデバイスのポータビリティを高めると同時に，プログラマの負担を減らす効果もあります． GPL（添付）とします． インストーラ: DirectInputSetup1.2 ソースコード： DirectInputRTC1.2 1. OpenRTM-aistのインストール OpenRTM-aist C++ 1.0 Release版をインストールします． 参考： OpenRTM-aist公式サイト 2. ダウンロードからDirectInputRTCをダウンロードします． 3a. インストーラをダウンロードした場合はインストーラを実行します． 3b. ソースコードからインストールする場合は，Visual C++ 2008(VC2008)，さらにDirectXのSDKが必要です． 3b.1. VC2008をインストールします．DirectX SDKをインストールします． 3b.2. 展開したフォルダ内のcopyprops.batを実行します． 3b.3. DirectInputRTC_vc9.slnファイルをVC2008で開きます． 3b.4. 構成を「Release」にします． 3b.5. プロジェクトのプロパティを開き，インクルードパスおよびライブラリパスをDirectXをインストールしたフォルダのincludeおよびlibに指定します． 3b.6 ビルドします． ファイルの説明 インストールされたファイルは以下の通りです． RT3DConnexion.dll RT3DConnexionRTCを使うためのRTCの本体です． RT3DConnexionCComp.exe RT3DConnexionをロードする実行ファイルです．これを使えばすぐにRTCを試せます． RT3DConnexionTest.dll テスト用のRTCの本体です． RT3DConnexionTestComp.exe [...]]]></description>
			<content:encoded><![CDATA[<p>DirectX に対応したジョイスティックで操作するためのRTCです．<br />
Windowsで認識するほとんどすべてのジョイスティックが使えます．<br />
僕は下記のXBox360用コントローラで動作確認しています．これ，両親指にアナログ入力があって，LRキーもアナログなので移動ロボットの制御とかに便利です．</p>
<p><iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=ysuga0731-22&#038;o=9&#038;p=8&#038;l=as4&#038;m=amazon&#038;f=ifr&#038;asins=B000CFX42E" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
<p><div class='postTabs_divs postTabs_curr_div' id='postTabs_0_608'>
<span class='postTabs_titles'><b> 概要</b></span></p>
<h2>DirectXとは</h2>
<p>DirectXはMicrosoft Windows上でゲームなどで使用するマルチメディア機能を活用するためのライブラリで，Direct3D DirectShow DirectInput DirectMusicなどなどの集まりからなっています．</p>
<p>ジョイスティックなどのゲーミングデバイスをつかさどるのはDirectInputというモジュールです．<br />
これを使えば様々なコントローラを共通のインターフェースに基づいてプログラミングできるのが特徴です．これはデバイスのポータビリティを高めると同時に，プログラマの負担を減らす効果もあります．</p>
<p></div>

<div class='postTabs_divs' id='postTabs_1_608'>
<span class='postTabs_titles'><b>ダウンロード</b></span><br />
GPL（添付）とします．</p>
<p>インストーラ:<br />
<a href='http://ysuga.net/wp-content/uploads/2011/02/DirectInputSetup1.2.zip'>DirectInputSetup1.2</a><br />
ソースコード：<br />
<a href='http://ysuga.net/wp-content/uploads/2011/02/DirectInputRTC1.2.zip'>DirectInputRTC1.2</a></p>
<p></div>

<div class='postTabs_divs' id='postTabs_2_608'>
<span class='postTabs_titles'><b>RTCのインストール</b></span><br />
1. OpenRTM-aistのインストール<br />
OpenRTM-aist C++ 1.0 Release版をインストールします．</p>
<p>参考： <a href="http://openrtm.org"> OpenRTM-aist公式サイト </a></p>
<p>2. ダウンロードからDirectInputRTCをダウンロードします．</p>
<p>3a. インストーラをダウンロードした場合はインストーラを実行します．</p>
<p>3b. ソースコードからインストールする場合は，Visual C++ 2008(VC2008)，さらにDirectXのSDKが必要です．<br />
3b.1. VC2008をインストールします．DirectX SDKをインストールします．<br />
3b.2. 展開したフォルダ内のcopyprops.batを実行します．<br />
3b.3. DirectInputRTC_vc9.slnファイルをVC2008で開きます．<br />
3b.4. 構成を「Release」にします．<br />
3b.5. プロジェクトのプロパティを開き，インクルードパスおよびライブラリパスをDirectXをインストールしたフォルダのincludeおよびlibに指定します．<br />
3b.6 ビルドします．</p>
<p></div>

<div class='postTabs_divs' id='postTabs_3_608'>
<span class='postTabs_titles'><b>マニュアル</b></span></p>
<h2>ファイルの説明</h2>
<p>インストールされたファイルは以下の通りです．</p>
<h4>RT3DConnexion.dll</h4>
<p>RT3DConnexionRTCを使うためのRTCの本体です．</p>
<h4>RT3DConnexionCComp.exe</h4>
<p>RT3DConnexionをロードする実行ファイルです．これを使えばすぐにRTCを試せます．</p>
<h4>RT3DConnexionTest.dll</h4>
<p>テスト用のRTCの本体です．</p>
<h4>RT3DConnexionTestComp.exe</h4>
<p>RT3DConnexionTest.dllをロードする実行ファイルです．</p>
<h4>rtc.conf</h4>
<p>RTCの状態を設定する設定ファイルです．</p>
<h2>初めてのRT3DConnexion</h2>
<h3>Start Naming Service</h3>
<p>OpenRTM-aist C++版をインストールしてください．<br />
インストール後は，スタートメニューから「OpenRTM-aist」＞「C++」＞「tools」＞「Start Naming Service」と選択してネームサービスを起動します．</p>
<h3>RT System Editorの実行</h3>
<p>スタートメニューから「OpenRTM-aist」＞「C++」＞「tools」＞「RT System Editor」と選択してSystem Editorを起動します．</p>
<h3>3DConnexionのドライバの実行</h3>
<p>3DConnexionのサイトから対応するドライバをインストールします．<br />
インストール後は，「3D Connexion」＞「3DConnexion 3DxWare」＞「Start Driver」でドライバが起動します．<br />
認識されるとマウスのLEDが光ります．</p>
<h3>RT3DConnexionおよびTestの実行</h3>
<p>インストーラを使った場合は，スタートメニューから，ソースからコンパイルした方はbinフォルダの，RT3DConnexionComp.exeとRT3DConnexionTestComp.exeを実行します．</p>
<h3>System Editorでのシステムの構築</h3>
<p>System Editorを使って，RT3DConnexionとRT3DConnexionTestを表示し，必要なポートを接続します．</p>
<h3>Activate</h3>
<p>すべてのRTCをActiveにします．するとTest側のコンソールにマウスのデータが表示されます．</p>
<p></div>

</p>
<script type='text/javascript'>jQuery(document).ready(function() { if(postTabs_getCookie('postTabs_608')) postTabs_show(postTabs_getCookie('postTabs_608'),608); });</script>]]></content:encoded>
			<wfw:commentRss>http://ysuga.net/robot/rtm/rtc/directinput/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RT3DConnexion (3D Mouse RTC)</title>
		<link>http://ysuga.net/robot/rtm/rtc/3dconnexion</link>
		<comments>http://ysuga.net/robot/rtm/rtc/3dconnexion#comments</comments>
		<pubDate>Tue, 15 Feb 2011 05:46:19 +0000</pubDate>
		<dc:creator>ysuga</dc:creator>
				<category><![CDATA[RTコンポーネント]]></category>

		<guid isPermaLink="false">http://ysuga.net/?p=603</guid>
		<description><![CDATA[3DConnexionの3Dマウスを操作するためのRTCです． 3DConnexionとは CADやGoogle Earthで使うことが出来る3次元マウスです． ボタンが付いている下記のモデルは高いので買ってません･･･動作確認取れないし，キー入力に対応したいんだけど･･･ GPL（添付）とします． インストーラ: RT3DConnexionSetup200 ソースコード： RT3DConnexion200 1. OpenRTM-aistのインストール OpenRTM-aist C++ 1.0 Release版をインストールします． 参考： OpenRTM-aist公式サイト 2. ダウンロードからRT3DConnexionRTCをダウンロードします． 3a. インストーラをダウンロードした場合はインストーラを実行します． 3b. ソースコードからインストールする場合は，Visual C++ 2008(VC2008)が必要です． 3b.1. VC2008をインストールします． 3b.2. 展開したフォルダ内のcopyprops.batを実行します． 3b.3. RT3DConnexion_vc9.slnファイルをVC2008で開きます． 3b.4. 構成を「Release」にしてビルドします． 3b.4. binフォルダ内に必要なバイナリがあります． ファイルの説明 インストールされたファイルは以下の通りです． RT3DConnexion.dll RT3DConnexionRTCを使うためのRTCの本体です． RT3DConnexionCComp.exe RT3DConnexionをロードする実行ファイルです．これを使えばすぐにRTCを試せます． RT3DConnexionTest.dll テスト用のRTCの本体です． RT3DConnexionTestComp.exe RT3DConnexionTest.dllをロードする実行ファイルです． rtc.conf RTCの状態を設定する設定ファイルです． 初めてのRT3DConnexion Start Naming Service OpenRTM-aist C++版をインストールしてください． インストール後は，スタートメニューから「OpenRTM-aist」＞「C++」＞「tools」＞「Start [...]]]></description>
			<content:encoded><![CDATA[<p>3DConnexionの3Dマウスを操作するためのRTCです．</p>
<p><div class='postTabs_divs postTabs_curr_div' id='postTabs_0_603'>
<span class='postTabs_titles'><b> 概要</b></span></p>
<h2>3DConnexionとは</h2>
<p>CADやGoogle Earthで使うことが出来る3次元マウスです．</p>
<p><iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=ysuga0731-22&#038;o=9&#038;p=8&#038;l=as4&#038;m=amazon&#038;f=ifr&#038;asins=B000LB7G00" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
<p>ボタンが付いている下記のモデルは高いので買ってません･･･動作確認取れないし，キー入力に対応したいんだけど･･･<br />
<iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=ysuga0731-22&#038;o=9&#038;p=8&#038;l=as4&#038;m=amazon&#038;f=ifr&#038;asins=B00283VWK4" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
<p><iframe src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&#038;bc1=000000&#038;IS2=1&#038;bg1=FFFFFF&#038;fc1=000000&#038;lc1=0000FF&#038;t=ysuga0731-22&#038;o=9&#038;p=8&#038;l=as4&#038;m=amazon&#038;f=ifr&#038;asins=B000LB5IXC" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
<p></div>

<div class='postTabs_divs' id='postTabs_1_603'>
<span class='postTabs_titles'><b>ダウンロード</b></span><br />
GPL（添付）とします．</p>
<p>インストーラ:<br />
<a href='http://ysuga.net/wp-content/uploads/2011/02/RT3DConnexionSetup200.zip'>RT3DConnexionSetup200</a></p>
<p>ソースコード：<br />
<a href='http://ysuga.net/wp-content/uploads/2011/02/RT3DConnexion200.zip'>RT3DConnexion200</a></p>
<p></div>

<div class='postTabs_divs' id='postTabs_2_603'>
<span class='postTabs_titles'><b>RTCのインストール</b></span><br />
1. OpenRTM-aistのインストール<br />
OpenRTM-aist C++ 1.0 Release版をインストールします．</p>
<p>参考： <a href="http://openrtm.org"> OpenRTM-aist公式サイト </a></p>
<p>2. ダウンロードからRT3DConnexionRTCをダウンロードします．</p>
<p>3a. インストーラをダウンロードした場合はインストーラを実行します．</p>
<p>3b. ソースコードからインストールする場合は，Visual C++ 2008(VC2008)が必要です．<br />
3b.1. VC2008をインストールします．<br />
3b.2. 展開したフォルダ内のcopyprops.batを実行します．<br />
3b.3. RT3DConnexion_vc9.slnファイルをVC2008で開きます．<br />
3b.4. 構成を「Release」にしてビルドします．<br />
3b.4. binフォルダ内に必要なバイナリがあります．</p>
<p></div>

<div class='postTabs_divs' id='postTabs_3_603'>
<span class='postTabs_titles'><b>マニュアル</b></span></p>
<h2>ファイルの説明</h2>
<p>インストールされたファイルは以下の通りです．</p>
<h4>RT3DConnexion.dll</h4>
<p>RT3DConnexionRTCを使うためのRTCの本体です．</p>
<h4>RT3DConnexionCComp.exe</h4>
<p>RT3DConnexionをロードする実行ファイルです．これを使えばすぐにRTCを試せます．</p>
<h4>RT3DConnexionTest.dll</h4>
<p>テスト用のRTCの本体です．</p>
<h4>RT3DConnexionTestComp.exe</h4>
<p>RT3DConnexionTest.dllをロードする実行ファイルです．</p>
<h4>rtc.conf</h4>
<p>RTCの状態を設定する設定ファイルです．</p>
<h2>初めてのRT3DConnexion</h2>
<h3>Start Naming Service</h3>
<p>OpenRTM-aist C++版をインストールしてください．<br />
インストール後は，スタートメニューから「OpenRTM-aist」＞「C++」＞「tools」＞「Start Naming Service」と選択してネームサービスを起動します．</p>
<h3>RT System Editorの実行</h3>
<p>スタートメニューから「OpenRTM-aist」＞「C++」＞「tools」＞「RT System Editor」と選択してSystem Editorを起動します．</p>
<h3>3DConnexionのドライバの実行</h3>
<p>3DConnexionのサイトから対応するドライバをインストールします．<br />
インストール後は，「3D Connexion」＞「3DConnexion 3DxWare」＞「Start Driver」でドライバが起動します．<br />
認識されるとマウスのLEDが光ります．</p>
<h3>RT3DConnexionおよびTestの実行</h3>
<p>インストーラを使った場合は，スタートメニューから，ソースからコンパイルした方はbinフォルダの，RT3DConnexionComp.exeとRT3DConnexionTestComp.exeを実行します．</p>
<h3>System Editorでのシステムの構築</h3>
<p>System Editorを使って，RT3DConnexionとRT3DConnexionTestを表示し，必要なポートを接続します．</p>
<h3>Activate</h3>
<p>すべてのRTCをActiveにします．するとTest側のコンソールにマウスのデータが表示されます．</p>
<p></div>

</p>
<script type='text/javascript'>jQuery(document).ready(function() { if(postTabs_getCookie('postTabs_603')) postTabs_show(postTabs_getCookie('postTabs_603'),603); });</script>]]></content:encoded>
			<wfw:commentRss>http://ysuga.net/robot/rtm/rtc/3dconnexion/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

