<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-455603831687802617</id><updated>2012-01-29T19:18:24.933+09:00</updated><category term='AR.Drone'/><category term='arm'/><category term='Willow Garage'/><category term='rosjava'/><category term='Twitter'/><category term='navigation'/><category term='ROS'/><category term='ARToolKit'/><category term='Original'/><category term='javascript'/><category term='Kinect'/><category term='OpenRTM'/><category term='工作'/><category term='Keepon'/><category term='OpenCV'/><category term='アーム'/><category term='OpenRTM-aist'/><category term='rospy'/><category term='rosjs'/><category term='Tutorial'/><category term='Roomba'/><category term='Care-O-bot'/><category term='bash'/><category term='Test'/><category term='PR2'/><category term='rosh'/><category term='ROS Inside'/><category term='pcl'/><category term='gtest'/><category term='mbed'/><category term='android'/><category term='Arduino'/><category term='m3pi'/><category term='Install'/><category term='EusLisp'/><category term='gazebo'/><category term='雑談'/><category term='i-SOBOT'/><category term='Ubuntu'/><category term='Robot'/><category term='TurtleBot'/><category term='OpenRAVE'/><title type='text'>ROS勉強記録</title><subtitle type='html'>Willow Garage社が作ったROSというロボット用ミドルウェア(Robot Operating System)を勉強します。ROSを使って自作ロボットに知能を吹き込みます。</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default?start-index=101&amp;max-results=100'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>177</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-2462148678951239122</id><published>2012-01-21T23:15:00.005+09:00</published><updated>2012-01-21T23:18:14.539+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rosjava'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>rosjavaをandroidで動かす(その２：カメラチュートリアル)</title><content type='html'>前回はandroid_tutorial_pubsubパッケージを試してみましたが、&lt;br /&gt;今回はandroid_tutorial_cameraをやってみました。&lt;br /&gt;&lt;br /&gt;とりあえずビデオ取りました。&lt;br /&gt;android上でサンプルを実行し、PC上でimage_viewを実行して画像を表示してみました。&lt;br /&gt;そんだけです。&lt;br /&gt;&lt;br /&gt;動画はiPhoneで取りました。&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="274" src="http://www.youtube.com/embed/fvyUvEEj7Yw" width="480"&gt;&lt;/iframe&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-2462148678951239122?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/2462148678951239122/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2012/01/rosjavaandroid_21.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/2462148678951239122'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/2462148678951239122'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2012/01/rosjavaandroid_21.html' title='rosjavaをandroidで動かす(その２：カメラチュートリアル)'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/fvyUvEEj7Yw/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-3492425757940688998</id><published>2012-01-20T22:16:00.000+09:00</published><updated>2012-01-21T21:56:26.915+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rosjava'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><category scheme='http://www.blogger.com/atom/ns#' term='android'/><title type='text'>rosjavaをandroidで動かす(その１)</title><content type='html'>今回はrosjavaをAndroidで動かします。&lt;br /&gt;ビルドするところまでやります。&lt;br /&gt;&lt;br /&gt;例のごとくrosjavaは開発が盛んなのですでに情報が古くなっている可能性が高いことをご了承ください。&lt;br /&gt;&lt;br /&gt;まずはソースコードを入手します。&lt;br /&gt;&lt;br /&gt;hg clone https://android.rosjava.googlecode.com/hg/rosjava_android --insecure&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;AndroidSDKは↓からダウンロードできます。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://developer.android.com/sdk/index.html"&gt;http://developer.android.com/sdk/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;tar zxvf Downloads/android-sdk_r16-linux.tgz&lt;br /&gt;などとして解凍しましょう。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;さらにandroid-sdkのandroidコマンドにPATHを通します。&lt;br /&gt;export PATH=$PATH:~/android-sdk-linux/tools&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;そしてビルドします。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;roscd android_tutorial_pubsub&lt;br /&gt;rosmake&lt;br /&gt;&lt;br /&gt;そしたら、eclipseでこのandroid_tutorial_pubsubフォルダをimportします。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;↓が参考になると思います。&lt;br /&gt;&lt;a href="http://ros.org/wiki/rosjava/Build/Eclipse"&gt;http://ros.org/wiki/rosjava/Build/Eclipse&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;あとはandroid_gingerbreadパッケージもimportすればeclipse上でビルドできると思います。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;注：以下Android開発環境が整っているものとして書きます。&lt;/b&gt;&lt;br /&gt;&lt;b&gt;VM等は最後に載せたサイトなどを参考に構築してください。&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;android_tutorial_pubsubプロジェクトを右クリックして、&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;Run As -&amp;gt; Android Applicationを選択します。&lt;br /&gt;&lt;br /&gt;エミュレータでの実行画面を載せておきます。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-BC98YX2IYpw/Txot8WZCa1I/AAAAAAAANF4/aBpN6WOd2gc/s1600/sim1.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="287" src="http://1.bp.blogspot.com/-BC98YX2IYpw/Txot8WZCa1I/AAAAAAAANF4/aBpN6WOd2gc/s320/sim1.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;上のテキストボックスにはROS_MASTER_URIを書くみたいです。&lt;br /&gt;ですが、このサンプルはprivate（外と繋げない）なので有効じゃないと思います。&lt;br /&gt;とりあえずこのままで。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-Oye2meMEJB0/Txot-GR363I/AAAAAAAANGA/xX16UgFHHzk/s1600/sim2.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="287" src="http://4.bp.blogspot.com/-Oye2meMEJB0/Txot-GR363I/AAAAAAAANGA/xX16UgFHHzk/s320/sim2.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;Hello world!＋数字が表示されます。&lt;br /&gt;&lt;br /&gt;左上のアイコンがかっこいいですね！&lt;br /&gt;&lt;br /&gt;Android開発はいろんなページがあるので、そちらで勉強しておく必要があると思います。&lt;br /&gt;&lt;br /&gt;私はここを参考にしました。&lt;br /&gt;&lt;a href="http://thinkit.co.jp/book/2010/05/06/1536"&gt;http://thinkit.co.jp/book/2010/05/06/1536&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;こちらにはもっといろいろまとまっています。&lt;br /&gt;&lt;a href="http://d.hatena.ne.jp/moto_maka/20110117/1295205374"&gt;http://d.hatena.ne.jp/moto_maka/20110117/1295205374&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;このサンプルはPrivateなので、残念ながら外からつなげることができません。&lt;br /&gt;&lt;br /&gt;次回はソースを見て、外とつなげられるようにしてみます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-3492425757940688998?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/3492425757940688998/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2012/01/rosjavaandroid.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/3492425757940688998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/3492425757940688998'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2012/01/rosjavaandroid.html' title='rosjavaをandroidで動かす(その１)'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-BC98YX2IYpw/Txot8WZCa1I/AAAAAAAANF4/aBpN6WOd2gc/s72-c/sim1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-7747963750420000066</id><published>2012-01-19T23:10:00.000+09:00</published><updated>2012-01-20T00:03:32.921+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='rosjava'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>rosjavaのパラメータサーバ</title><content type='html'>(この記事は2011/01/19時点でのものです。すでに古くなっている可能性があります。ご注意ください。）&lt;br /&gt;&lt;br /&gt;今回はrosjavaのパラメータサーバを使ってみます。&lt;br /&gt;ROSは一応Pub/Sub、サービス、パラメータが３種の神器だと思うので、&lt;br /&gt;これでひと通りそろったことになります。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ros.org/wiki/rosjava/Overview/Parameters"&gt;http://ros.org/wiki/rosjava/Overview/Parameters&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;まずnodeからParameterTreeを作ります。&lt;br /&gt;ここからparameterにアクセスします。&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre dir="ltr" id="CA-c54e30ae9c3819a845ce5c1f0311aec40131828c" lang="en" style="background-color: #f3f5f7; border-bottom-style: none; border-color: initial; border-left-style: none; border-right-style: none; border-top-style: none; border-width: initial; font-family: courier, monospace; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 10pt; padding-left: 10pt; padding-right: 10pt; padding-top: 10pt; white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="line"&gt;&lt;span class="ID" style="color: black;"&gt;ParameterTree&lt;/span&gt; &lt;span class="ID" style="color: black;"&gt;params&lt;/span&gt; = &lt;span class="ID" style="color: black;"&gt;node&lt;/span&gt;.&lt;span class="ID" style="color: black;"&gt;newParameterTree&lt;/span&gt;();&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div style="font-size: 15px;"&gt;&lt;span class="line"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="line"&gt;で、実際に使うには以下のようにします。&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: 'VL PGothic';"&gt;rosjavaではパラメータの型ごとに関数が異なります。型が合わないと例外が投げられます。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="line"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre dir="ltr" id="CA-0ffde6ca9f58b4c103e13c741a28392d6bf3f9ad" lang="en" style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: none; border-bottom-width: 1pt; border-color: initial; border-left-color: rgb(174, 189, 204); border-left-style: none; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: none; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: none; border-top-width: 1pt; border-width: initial; font-family: courier, monospace; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 10pt; padding-left: 10pt; padding-right: 10pt; padding-top: 10pt; white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="line"&gt;&lt;span class="line"&gt;  &lt;span class="ResWord" style="color: #a00000;"&gt;boolean&lt;/span&gt; &lt;span class="ID" style="color: black;"&gt;foo&lt;/span&gt; = &lt;span class="ID" style="color: black;"&gt;params&lt;/span&gt;.&lt;span class="ID" style="color: black;"&gt;getBoolean&lt;/span&gt;(&lt;span class="String" style="color: #004080;"&gt;"/foo"&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span class="line"&gt;&lt;span class="anchor" id="line-2-2"&gt;&lt;/span&gt;  &lt;span class="ResWord" style="color: #a00000;"&gt;int&lt;/span&gt; &lt;span class="ID" style="color: black;"&gt;bar&lt;/span&gt; = &lt;span class="ID" style="color: black;"&gt;params&lt;/span&gt;.&lt;span class="ID" style="color: black;"&gt;getInteger&lt;/span&gt;(&lt;span class="String" style="color: #004080;"&gt;"/bar"&lt;/span&gt;, &lt;span class="Number" style="color: #0080c0;"&gt;42&lt;/span&gt; &lt;span class="Comment" style="color: green;"&gt;/* default value */&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span class="line"&gt;&lt;span class="anchor" id="line-3-1"&gt;&lt;/span&gt;  &lt;span class="ResWord" style="color: #a00000;"&gt;double&lt;/span&gt; &lt;span class="ID" style="color: black;"&gt;baz&lt;/span&gt; = &lt;span class="ID" style="color: black;"&gt;params&lt;/span&gt;.&lt;span class="ID" style="color: black;"&gt;getDouble&lt;/span&gt;(&lt;span class="String" style="color: #004080;"&gt;"/foo/baz"&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span class="line"&gt;&lt;span class="anchor" id="line-4-1"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="line"&gt;&lt;span class="anchor" id="line-5-1"&gt;&lt;/span&gt;  &lt;span class="ID" style="color: black;"&gt;params&lt;/span&gt;.&lt;span class="ID" style="color: black;"&gt;set&lt;/span&gt;(&lt;span class="String" style="color: #004080;"&gt;"/bloop"&lt;/span&gt;, &lt;span class="String" style="color: #004080;"&gt;"Hello, world!"&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span class="line"&gt;&lt;span class="anchor" id="line-6-1"&gt;&lt;/span&gt;  &lt;span class="ID" style="color: black;"&gt;String&lt;/span&gt; &lt;span class="ID" style="color: black;"&gt;helloWorld&lt;/span&gt; = &lt;span class="ID" style="color: black;"&gt;params&lt;/span&gt;.&lt;span class="ID" style="color: black;"&gt;getString&lt;/span&gt;(&lt;span class="String" style="color: #004080;"&gt;"/bloop"&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span class="line"&gt;&lt;span class="anchor" id="line-7-1"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="line"&gt;&lt;span class="anchor" id="line-8-1"&gt;&lt;/span&gt;  &lt;span class="ID" style="color: black;"&gt;List&lt;/span&gt;&amp;lt;&lt;span class="ID" style="color: black;"&gt;Integer&lt;/span&gt;&amp;gt; &lt;span class="ID" style="color: black;"&gt;numbers&lt;/span&gt; = &lt;span class="ID" style="color: black;"&gt;params&lt;/span&gt;.&lt;span class="ID" style="color: black;"&gt;getList&lt;/span&gt;(&lt;span class="String" style="color: #004080;"&gt;"/numbers"&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span class="line"&gt;&lt;span class="anchor" id="line-9-1"&gt;&lt;/span&gt;  &lt;span class="ID" style="color: black;"&gt;Map&lt;/span&gt;&amp;lt;&lt;span class="ID" style="color: black;"&gt;String&lt;/span&gt;, &lt;span class="ID" style="color: black;"&gt;String&lt;/span&gt;&amp;gt; &lt;span class="ID" style="color: black;"&gt;strings&lt;/span&gt; = &lt;span class="ID" style="color: black;"&gt;params&lt;/span&gt;.&lt;span class="ID" style="color: black;"&gt;getMap&lt;/span&gt;(&lt;span class="String" style="color: #004080;"&gt;"/strings"&lt;/span&gt;);&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span class="line"&gt; &lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="line"&gt;&lt;span class="line"&gt;また、パラメータの変更を監視するParameterListenerを作ることができます。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="line"&gt; &lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="line"&gt;&lt;span class="line"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre dir="ltr" id="CA-9c81a5548f90cff28229e26b261602053409ed10" lang="en" style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: none; border-bottom-width: 1pt; border-color: initial; border-left-color: rgb(174, 189, 204); border-left-style: none; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: none; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: none; border-top-width: 1pt; border-width: initial; font-family: courier, monospace; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 10pt; padding-left: 10pt; padding-right: 10pt; padding-top: 10pt; white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="line"&gt;&lt;span class="line"&gt;&lt;span class="line"&gt;&lt;span class="ID" style="color: black;"&gt;params&lt;/span&gt;.&lt;span class="ID" style="color: black;"&gt;addParameterListener&lt;/span&gt;(&lt;span class="String" style="color: #004080;"&gt;"/foo/bar"&lt;/span&gt;, &lt;span class="ResWord" style="color: #a00000;"&gt;new&lt;/span&gt; &lt;span class="ID" style="color: black;"&gt;ParameterListener&lt;/span&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span class="line"&gt;&lt;span class="anchor" id="line-2-4"&gt;&lt;/span&gt;  &lt;span class="ID" style="color: black;"&gt;@Override&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="line"&gt;&lt;span class="anchor" id="line-3-2"&gt;&lt;/span&gt;  &lt;span class="ResWord" style="color: #a00000;"&gt;public&lt;/span&gt; &lt;span class="ResWord" style="color: #a00000;"&gt;void&lt;/span&gt; &lt;span class="ID" style="color: black;"&gt;onNewValue&lt;/span&gt;(&lt;span class="ID" style="color: black;"&gt;Object&lt;/span&gt; &lt;span class="ID" style="color: black;"&gt;value&lt;/span&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span class="line"&gt;&lt;span class="anchor" id="line-4-2"&gt;&lt;/span&gt;    ...&lt;/span&gt;&lt;br /&gt;&lt;span class="line"&gt;&lt;span class="anchor" id="line-5-2"&gt;&lt;/span&gt;  }&lt;/span&gt;&lt;br /&gt;&lt;span class="line"&gt;&lt;span class="anchor" id="line-6-2"&gt;&lt;/span&gt;});&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span class="line"&gt;&lt;span class="line"&gt; &lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="font-size: 15px;"&gt;&lt;span class="line"&gt;&lt;span class="line"&gt;&lt;span class="line"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="line"&gt;&lt;span class="line"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;以上で説明は終わりです。&lt;br /&gt;&lt;br /&gt;前回のServiceClientのサンプルをちょっと変更してパラメータを取得するようにしてみました。&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;/*&lt;br /&gt;&amp;nbsp;* rosjava service client sample&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;&lt;br /&gt;package org.ros.tutorials.service;&lt;br /&gt;&lt;br /&gt;import org.apache.commons.logging.Log;&lt;br /&gt;import org.ros.node.Node;&lt;br /&gt;import org.ros.node.NodeMain;&lt;br /&gt;import org.ros.node.service.ServiceClient;&lt;br /&gt;import org.ros.node.service.ServiceResponseListener;&lt;br /&gt;import org.ros.exception.RemoteException;&lt;br /&gt;import org.ros.service.test_ros.AddTwoInts;&lt;br /&gt;import org.ros.namespace.GraphName;&lt;br /&gt;&lt;br /&gt;// add for parameter&lt;br /&gt;import org.ros.node.parameter.ParameterTree;&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;&amp;nbsp;* @author OTL&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;public class Client implements NodeMain {&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public GraphName getDefaultNodeName() {&lt;br /&gt;    return new GraphName("rosjava_tutorial_service/client");&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp; public void onStart(Node node) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; try {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ServiceClient&amp;lt;AddTwoInts.Request, AddTwoInts.Response&amp;gt; client =&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; node.newServiceClient("/add_two_ints", "test_ros/AddTwoInts");&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Thread.sleep(100);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; AddTwoInts.Request srv = new AddTwoInts.Request();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // add for parameter&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ParameterTree params = node.newParameterTree();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; srv.a = params.getInteger("/a", 1);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; srv.b = params.getInteger("/b", 5);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; client.call(srv, new ServiceResponseListener&amp;lt;AddTwoInts.Response&amp;gt;() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void onSuccess(AddTwoInts.Response res) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; log.info("call service success! " + res.sum);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void onFailure(RemoteException arg) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; log.info("call service fail");&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;br /&gt;&amp;nbsp; &amp;nbsp; } catch (Exception e) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (node != null) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; node.getLog().fatal(e);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; } else {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; e.printStackTrace();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp; public void onShutdown(Node node) {&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp; public void onShutdownComplete(Node node) {&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div&gt;重要なのは以下のところです。ParameterTreeをnodeから作って、getIntegerでint型のパラメータを取得しています。&lt;br /&gt;rosparam set /a 100&lt;br /&gt;rosparam set /b 200&lt;br /&gt;などとしてから実行するとそれらを加えた結果を返してくれます。&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code2"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ParameterTree params = node.newParameterTree();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; srv.a = params.getInteger("/a", 1);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; srv.b = params.getInteger("/b", 5);&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-7747963750420000066?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/7747963750420000066/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2012/01/rosjava_1166.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/7747963750420000066'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/7747963750420000066'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2012/01/rosjava_1166.html' title='rosjavaのパラメータサーバ'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-5741457534293568195</id><published>2012-01-19T23:03:00.000+09:00</published><updated>2012-01-19T23:05:50.242+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='rosjava'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>rosjavaのサービスを試す</title><content type='html'>(この記事は2011/01/19現在のものです。rosjavaは開発が盛んなので、ここに書いてあることがすでに古くなっている可能性が高いです。１週間で劇的に変化します。ご注意ください）&lt;br /&gt;&lt;br /&gt;これまでにrosjavaのインストール、rosjavaチュートリアル(pub/sub)の実行、&lt;br /&gt;Publisher、Subscriberを見てきました。&lt;br /&gt;&lt;br /&gt;今回からrosjavaのサービスを利用してみます。&lt;br /&gt;&lt;br /&gt;まずはパッケージの準備です。&lt;br /&gt;rosjavaはビルドシステムを作るのがめんどうなので、rosjava_tutorial_pubsubをコピーします。&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;roscd rosjava_core&lt;br /&gt;cp -r rosjava_tutorial_pubsub rosjava_tutorial_service&lt;/blockquote&gt;次にmanifest.xmlのrosjava-pathelementを修正します。&lt;br /&gt;また、test_rosパッケージのAddTwoIntsサービスを利用するので、dependに追加しておきます。&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;package&amp;gt;&lt;br /&gt;  &amp;lt;description brief="rosjava_tutorial_service"&amp;gt;&lt;br /&gt;&lt;br /&gt;    rosjava_tutorial_service&lt;br /&gt;&lt;br /&gt;  &amp;lt;/description&amp;gt;&lt;br /&gt;  &amp;lt;author&amp;gt;OTL&amp;lt;/author&amp;gt;&lt;br /&gt;  &amp;lt;license&amp;gt;BSD&amp;lt;/license&amp;gt;&lt;br /&gt;  &amp;lt;review status="unreviewed" notes=""/&amp;gt;&lt;br /&gt;  &amp;lt;url&amp;gt;http://ros.org/wiki/rosjava_tutorial_service&amp;lt;/url&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;depend package="rosjava" /&amp;gt;&lt;br /&gt;  &amp;lt;depend package="test_ros" /&amp;gt;&lt;br /&gt;&lt;br /&gt;  &amp;lt;export&amp;gt;&lt;br /&gt;    &amp;lt;rosjava-src location="src/main/java" /&amp;gt;&lt;br /&gt;    &amp;lt;rosjava-pathelement location="target/" groupId="org.ros" artifactId="org.ros.rosjava.tutorials.service" version="0.0.0" built="true" /&amp;gt;&lt;br /&gt;  &amp;lt;/export&amp;gt;&lt;br /&gt;&amp;lt;/package&amp;gt;&lt;br /&gt;&lt;/pre&gt;あとは特に変更の必要はありません。&lt;br /&gt;src/main/java/org/ros/tutorials/pubsubを削除して、&lt;br /&gt;src/main/java/org/ros/tutorials/service/以下にソースを書きましょう。&lt;br /&gt;&lt;br /&gt;サービスサーバは以下のような感じ。Server.javaとして保存しましょう。&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;/* rosjava service server sample*/&lt;br /&gt;&lt;br /&gt;package org.ros.tutorials.service;&lt;br /&gt;&lt;br /&gt;import org.apache.commons.logging.Log;&lt;br /&gt;import org.ros.message.MessageListener;&lt;br /&gt;import org.ros.namespace.GraphName;&lt;br /&gt;import org.ros.node.Node;&lt;br /&gt;import org.ros.node.NodeMain;&lt;br /&gt;import org.ros.node.service.ServiceServer;&lt;br /&gt;import org.ros.internal.node.service.ServiceResponseBuilder;&lt;br /&gt;import org.ros.service.test_ros.AddTwoInts;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;public class Server implements NodeMain {&lt;br /&gt;&lt;br /&gt;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp; public GraphName getDefaultNodeName() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; return new GraphName("rosjava_tutorial_service/server");&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp; public void onStart(Node node) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; final Log log = node.getLog();&lt;br /&gt;&amp;nbsp; &amp;nbsp; ServiceServer&amp;lt;AddTwoInts.Request, AddTwoInts.Response&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; server = node.newServiceServer("/add_two_ints",&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;"test_ros/AddTwoInts",&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; new ServiceResponseBuilder&amp;lt;AddTwoInts.Request, AddTwoInts.Response&amp;gt;() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public AddTwoInts.Response build(AddTwoInts.Request request) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; AddTwoInts.Response res = new AddTwoInts.Response();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; res.sum = request.a + request.b;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; log.info("add " + request.a + ", " + request.b);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return res;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;});&lt;br /&gt;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp; public void onShutdown(Node node) {&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp; public void onShutdownComplete(Node node) {&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ServiceServerの型にRequestとResponseの両方を入れないといけないところがC++と違いますね。&lt;br /&gt;また、ServiceResponseBuilderというものを使ってコールバックを書くようです。&lt;br /&gt;（なぜか現在org.ros.internal.node.service.ServiceResponseBuilderという、internalなところにあるクラスです）&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;次は呼び出す方、Client.javaです。&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;/* rosjava service client sample&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;&lt;br /&gt;package org.ros.tutorials.service;&lt;br /&gt;&lt;br /&gt;import com.google.common.base.Preconditions;&lt;br /&gt;&lt;br /&gt;import org.apache.commons.logging.Log;&lt;br /&gt;import org.ros.node.Node;&lt;br /&gt;import org.ros.node.NodeMain;&lt;br /&gt;import org.ros.namespace.GraphName;&lt;br /&gt;import org.ros.node.service.ServiceClient;&lt;br /&gt;import org.ros.node.service.ServiceResponseListener;&lt;br /&gt;import org.ros.exception.RemoteException;&lt;br /&gt;import org.ros.service.test_ros.AddTwoInts;&lt;br /&gt;&lt;br /&gt;/*&lt;br /&gt;&amp;nbsp;* @author OTL&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;public class Client implements NodeMain {&lt;br /&gt;&amp;nbsp; @Override&lt;br /&gt;  public GraphName getDefaultNodeName() {&lt;br /&gt;    return new GraphName("rosjava_tutorial_service/client");&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;&amp;nbsp; public void onStart(Node node) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; final Log log = node.getLog();&lt;br /&gt;&amp;nbsp; &amp;nbsp; try {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ServiceClient&amp;lt;AddTwoInts.Request, AddTwoInts.Response&amp;gt; client =&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; node.newServiceClient("/add_two_ints", "test_ros/AddTwoInts");&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Thread.sleep(100);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; AddTwoInts.Request srv = new AddTwoInts.Request();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; srv.a = 5;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; srv.b = 1;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; client.call(srv, new ServiceResponseListener&amp;lt;AddTwoInts.Response&amp;gt;() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void onSuccess(AddTwoInts.Response res) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; log.info("call service success! " + res.sum);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public void onFailure(RemoteException arg) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; log.info("call service fail");&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;br /&gt;&amp;nbsp; &amp;nbsp; } catch (Exception e) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (node != null) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; node.getLog().fatal(e);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; } else {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; e.printStackTrace();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp; public void onShutdown(Node node) {&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; @Override&lt;br /&gt;&amp;nbsp; public void onShutdownComplete(Node node) {&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;こちらもRequestとResponseの両方の型をいれますね。&lt;br /&gt;そして、callの成否時の処理をServiceResponseListenerに書くようです。&lt;br /&gt;&lt;br /&gt;&lt;div&gt;あとは普通にmakeすればできあがりです。&lt;br /&gt;実行するにはroscoreを上げて、&lt;br /&gt;サーバは&lt;br /&gt;&lt;br /&gt;rosrun rosjava_bootstrap run.py rosjava_tutorial_service org.ros.tutorials.service.Server&lt;br /&gt;&lt;br /&gt;クライアントは&lt;br /&gt;rosrun rosjava_bootstrap run.py rosjava_tutorial_service org.ros.tutorials.service.Client&lt;br /&gt;&lt;br /&gt;のように実行します。&lt;br /&gt;ちなみにサーバをテストしようとして、&lt;br /&gt;rosservice call /add_two_ints 1 2&lt;br /&gt;とするとエラーになります。どうやらrosservice args /add_two_intsがうまく動いていないようです。&lt;br /&gt;&lt;br /&gt;rosserviceが使えないので、サーバだけ動作確認したい場合は&lt;br /&gt;rosrun test_ros add_two_ints_client&lt;br /&gt;とするといいと思います。&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-5741457534293568195?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/5741457534293568195/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2012/01/rosjava_19.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/5741457534293568195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/5741457534293568195'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2012/01/rosjava_19.html' title='rosjavaのサービスを試す'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-8622410191429239518</id><published>2012-01-16T22:25:00.000+09:00</published><updated>2012-01-19T23:58:17.112+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rosjava'/><category scheme='http://www.blogger.com/atom/ns#' term='雑談'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>rosjavaについて</title><content type='html'>rosjavaの記事をここ数日書いてきましたが、開発が激しすぎて、記事にしても&lt;br /&gt;すぐ陳腐化してしまいそうなので、ちょっと削除しました。&lt;br /&gt;&lt;br /&gt;が、注意書きを加え、最新版に対応させて、また復活させました。&lt;br /&gt;&lt;br /&gt;まだコアライブラリの使い方も定まってなさそうなので、&lt;br /&gt;基本的な文法が全く変わってしまっています。&lt;br /&gt;roscppとかほとんど変化ないから、そんなものかと思っていましたが、&lt;br /&gt;全然違います。&lt;br /&gt;&lt;br /&gt;まあ、今までの記事もすでに古くなっているものも多いですから、&lt;br /&gt;記事が古かったらごめんなさい。ということで。。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-8622410191429239518?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/8622410191429239518/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2012/01/rosjava_16.html#comment-form' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/8622410191429239518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/8622410191429239518'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2012/01/rosjava_16.html' title='rosjavaについて'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-6357292107131392667</id><published>2012-01-16T20:49:00.000+09:00</published><updated>2012-01-19T22:53:25.980+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='rosjava'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>rosjavaのチュートリアル(Subscriber)</title><content type='html'>(この記事は2011/01/19現在のものです。rosjavaは開発が激しいため、すでにここに書いてあることは正しくない可能性が高いです。１週間で全く変わる可能性もあります。ご注意ください)&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ros-robot.blogspot.com/2012/01/rosjavapublisher.html" target="_blank"&gt;前回&lt;/a&gt;はrosjavaでPublisherを作りました。&lt;br /&gt;今回はrosjava_tutorial_pubsubの続きで、Subscriber(Listener.java)を見て行きます。&lt;br /&gt;とりあえずソース貼ります。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;/*&lt;br /&gt; * Copyright (C) 2011 Google Inc.&lt;br /&gt; * &lt;br /&gt; * Licensed under the Apache License, Version 2.0 (the "License"); you may not&lt;br /&gt; * use this file except in compliance with the License. You may obtain a copy of&lt;br /&gt; * the License at&lt;br /&gt; * &lt;br /&gt; * http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt; * &lt;br /&gt; * Unless required by applicable law or agreed to in writing, software&lt;br /&gt; * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT&lt;br /&gt; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the&lt;br /&gt; * License for the specific language governing permissions and limitations under&lt;br /&gt; * the License.&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;package org.ros.tutorials.pubsub;&lt;br /&gt;&lt;br /&gt;import org.apache.commons.logging.Log;&lt;br /&gt;import org.ros.message.MessageListener;&lt;br /&gt;import org.ros.namespace.GraphName;&lt;br /&gt;import org.ros.node.Node;&lt;br /&gt;import org.ros.node.NodeMain;&lt;br /&gt;import org.ros.node.topic.Subscriber;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * This is a simple rosjava {@link Subscriber} {@link Node}. It assumes an&lt;br /&gt; * external roscore is already running.&lt;br /&gt; * &lt;br /&gt; * @author damonkohler@google.com (Damon Kohler)&lt;br /&gt; */&lt;br /&gt;public class Listener implements NodeMain {&lt;br /&gt;@Override&lt;br /&gt;  public GraphName getDefaultNodeName() {&lt;br /&gt;    return new GraphName("rosjava_tutorial_pubsub/listener");&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onStart(Node node) {&lt;br /&gt;    final Log log = node.getLog();&lt;br /&gt;    Subscriber&amp;lt;org.ros.message.std_msgs.string&amp;gt; subscriber =&lt;br /&gt;        node.newSubscriber("chatter", "std_msgs/String");&lt;br /&gt;    subscriber.addMessageListener(new MessageListener&amp;lt;org.ros.message.std_msgs.string&amp;gt;() {&lt;br /&gt;      @Override&lt;br /&gt;      public void onNewMessage(org.ros.message.std_msgs.String message) {&lt;br /&gt;        log.info("I heard: \"" + message.data + "\"");&lt;br /&gt;      }&lt;br /&gt;    });&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onShutdown(Node node) {&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onShutdownComplete(Node node) {&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;今回重要なのは以下の２つですね。&lt;br /&gt;&lt;br /&gt;１．まずSubscriberの作成は以下です。Publisherのときと同じで文字列で型を入れてますね。&lt;br /&gt;&lt;blockquote class="tr_bq"&gt;Subscriber&amp;lt;org.ros.message.std_msgs.String&amp;gt; subscriber =&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; node.newSubscriber("chatter", "std_msgs/String");&lt;/blockquote&gt;&lt;br /&gt;&lt;div&gt;２．メッセージリスナーの登録。C++でのコールバック関数登録ですね。&lt;/div&gt;&lt;div&gt;関数を定義をそのまま引数に入れています。&lt;/div&gt;&lt;blockquote class="tr_bq"&gt;subscriber.addMessageListener(new MessageListener&amp;lt;org.ros.message.std_msgs.String&amp;gt;() {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; @Override&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; public void　onNewMessage(org.ros.message.std_msgs.String message) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; log.info("I heard: \"" + message.data + "\"");&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;});&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;MessageListenerは以下のような定義です。&lt;br /&gt;&lt;pre class="java" name="code"&gt;public interface MessageListener&lt;t&gt; {&lt;br /&gt;  void onNewMessage(T message);&lt;br /&gt;}&lt;br /&gt;&lt;/t&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;ログはnode.getLog().info("hogehoge")という形式ですね。&lt;br /&gt;&lt;br /&gt;これでPubSubができました。実行方法は&lt;a href="http://ros-robot.blogspot.com/2012/01/rosjava_13.html" target="_blank"&gt;過去記事&lt;/a&gt;を参照ください。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-6357292107131392667?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/6357292107131392667/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2012/01/rosjavasubscriber.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6357292107131392667'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6357292107131392667'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2012/01/rosjavasubscriber.html' title='rosjavaのチュートリアル(Subscriber)'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-3722346964917782187</id><published>2012-01-15T22:28:00.001+09:00</published><updated>2012-01-19T22:54:14.661+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='rosjava'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>rosjavaのチュートリアル(Publisher)</title><content type='html'>（この記事は2011/01/19現在のものです。rosjavaは開発が激しいのですでに参考にならないかもしれません）&lt;br /&gt;&lt;br /&gt;rosjavaの概要をまとめたページを見つけました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ros.org/wiki/rosjava/Overview"&gt;http://ros.org/wiki/rosjava/Overview&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;まだ書かれていない項目も多いですが、これは必読です。&lt;br /&gt;javaで書かれたroscoreがあることなどが書いて有りますね。&lt;br /&gt;&lt;br /&gt;でもとりあえずこれを無視して、rosjava_tutorial_pubsubパッケージを見ていこうと思います。&lt;br /&gt;&lt;br /&gt;今回はとりあえずTalker（Publisherのサンプル）を見てみます。&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;/*               &lt;br /&gt; * Copyright (C) 2011 Google Inc.  &lt;br /&gt; * &lt;br /&gt; * Licensed under the Apache License, Version 2.0 (the "License"); you may not                                                                           &lt;br /&gt; * use this file except in compliance with the License. You may obtain a copy of                                                                         &lt;br /&gt; * the License at     &lt;br /&gt; *        &lt;br /&gt; * http://www.apache.org/licenses/LICENSE-2.0&lt;br /&gt; *&lt;br /&gt; * Unless required by applicable law or agreed to in writing, software&lt;br /&gt; * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT&lt;br /&gt; * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the  &lt;br /&gt; * License for the specific language governing permissions and limitations under                                                                         &lt;br /&gt; * the License.    &lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;import org.ros.concurrent.CancellableLoop;&lt;br /&gt;import org.ros.namespace.GraphName;&lt;br /&gt;import org.ros.node.Node;&lt;br /&gt;import org.ros.node.NodeMain;&lt;br /&gt;import org.ros.node.topic.Publisher;&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt; * A simple {@link Publisher} {@link Node}.&lt;br /&gt; * &lt;br /&gt; * @author damonkohler@google.com (Damon Kohler)&lt;br /&gt; */&lt;br /&gt;public class Talker implements NodeMain {&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public GraphName getDefaultNodeName() {&lt;br /&gt;    return new GraphName("rosjava_tutorial_pubsub/talker");&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onStart(final Node node) {&lt;br /&gt;    final Publisher&amp;lt;org.ros.message.std_msgs.String&amp;gt; publisher =&lt;br /&gt;        node.newPublisher("chatter", "std_msgs/String");&lt;br /&gt;    // This CancellableLoop will be canceled automatically when the Node shuts&lt;br /&gt;    // down.&lt;br /&gt;    node.executeCancellableLoop(new CancellableLoop() {&lt;br /&gt;      private int sequenceNumber;&lt;br /&gt;&lt;br /&gt;      @Override&lt;br /&gt;      protected void setup() {&lt;br /&gt;        sequenceNumber = 0;&lt;br /&gt;      }&lt;br /&gt;&lt;br /&gt;      @Override&lt;br /&gt;      protected void loop() throws InterruptedException {&lt;br /&gt;        org.ros.message.std_msgs.String str = new org.ros.message.std_msgs.String();&lt;br /&gt;        str.data = "Hello world! " + sequenceNumber;&lt;br /&gt;        publisher.publish(str);&lt;br /&gt;        sequenceNumber++;&lt;br /&gt;        Thread.sleep(1000);&lt;br /&gt;      }&lt;br /&gt;    });&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onShutdown(Node node) {&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  @Override&lt;br /&gt;  public void onShutdownComplete(Node node) {&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;NodeMainというインタフェースを実装しています。NodeMainは&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;public interface NodeMain extends NodeListener {&lt;br /&gt;/**&lt;br /&gt;   * @return the name of the {@link Node} that will be used if a name was not&lt;br /&gt;   *         specified in the {@link Node}'s associated&lt;br /&gt;   *         {@link NodeConfiguration}&lt;br /&gt;   */&lt;br /&gt;  GraphName getDefaultNodeName();&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;となっており、NodeListenerは以下のようになっています。&lt;br /&gt;&lt;br /&gt;&lt;pre class="java" name="code"&gt;public interface NodeListener {&lt;br /&gt;  void onStart(Node node);&lt;br /&gt;  void onShutdown(Node node);&lt;br /&gt;  void onShutdownComplete(Node node);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;ということで、Nodeスタート時にonStartが呼ばれ、終了開始時にonShutdownが呼ばれ、終了後にonShutdownCompleteが呼ばれるようです。&lt;br /&gt;&lt;br /&gt;まず、getDefaultNodeNameでノードのデフォルトの名前を決めています。&lt;br /&gt;&lt;br /&gt;次に、メインとなるのはonStartです。&lt;br /&gt;Publisherの作り方は↓のように書くみたいですね。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Publisher&amp;lt;org.ros.message.std_msgs.String&amp;gt; publisher = node.newPublisher("chatter", "std_msgs/String");&lt;/blockquote&gt;&lt;br /&gt;C++とかなり似てますね。&lt;br /&gt;&lt;br /&gt;そしてメインループはnode.executeCancellableLoopで作っています。&lt;br /&gt;C-cで止められる仕組みだと思います。&lt;br /&gt;setupが１回実行され、loopが回るみたいですね。そしてC-cで止まると。&lt;br /&gt;&lt;br /&gt;Talkerはこれでおしまい。次回はListenerです。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-3722346964917782187?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/3722346964917782187/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2012/01/rosjavapublisher.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/3722346964917782187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/3722346964917782187'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2012/01/rosjavapublisher.html' title='rosjavaのチュートリアル(Publisher)'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-520313376281875074</id><published>2012-01-13T17:59:00.003+09:00</published><updated>2012-01-19T23:08:06.816+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial'/><category scheme='http://www.blogger.com/atom/ns#' term='rosjava'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>rosjavaのチュートリアルをビルド＆実行</title><content type='html'>(この記事は2011/01/19時点でのものです。現在ちゃんと動くか分かりません。rosjavaは開発が激しくついていくことが困難です。）&lt;br /&gt;&lt;br /&gt;前回はrosjavaのインストールをしましたが、&lt;br /&gt;今回はそれについてきているチュートリアルをビルド＆実行します。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ros.org/wiki/rosjava/Tutorials/Running%20rosjava_tutorial_pubsub"&gt;http://ros.org/wiki/rosjava/Tutorials/Running%20rosjava_tutorial_pubsub&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ros-robot.blogspot.com/2012/01/rosjava.html" target="_blank"&gt;前回&lt;/a&gt;のチュートリアルはやっておいてくださいね。&lt;br /&gt;&lt;br /&gt;rosjavaはまだビルドが簡単じゃないです。&lt;br /&gt;rosは基本的にcmakeでコンパイルしますが、javaは普通antというビルドツールを使います。rosjavaもantを使っているようです。&lt;br /&gt;&lt;br /&gt;では、すでにrosjava_tutorial_pubsubというパッケージがあると思うので、&lt;br /&gt;とりあえずビルドしましょう。&lt;br /&gt;&lt;br /&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; font-size: 15px; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;roscd rosjava_tutorial_pubsub&lt;/pre&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; font-size: 15px; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="anchor" id="line-2-2"&gt;&lt;/span&gt;rosmake&lt;/pre&gt;&lt;div style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;ROS触ったことがある人なら意味は分かりますよね。&lt;/div&gt;&lt;div style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;パッケージでrosjavaを入れてしまっている人は削除するか、ROS_PACKAGE_PATHにソースのほうが先に来るようにしないといけませんね。&lt;/div&gt;&lt;div style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;では実行しましょう。まずはいつもどおりroscoreを上げます。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;roscore&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;で、以下のようにしてtalkerを上げましょう。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;rosrun rosjava_bootstrap run.py rosjava_tutorial_pubsub org.ros.tutorials.pubsub.Talker&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;rostopic list&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;すると&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;/rosjava_tutorial/talker&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;が見えますし、rostopicでちゃんとpublishされているのが分かります。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote class="tr_bq"&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;rostopic echo /chatter&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;data: Hello world! 1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;data: Hello world! 2&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;---&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;data: Hello world! 3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;ではlistenerも上げましょう。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;rosrun rosjava_bootstrap run.py rosjava_tutorial_pubsub org.ros.tutorials.pubsub.Listener&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;こんな感じで表示されますね。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote class="tr_bq"&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;2012/01/12 23:56:05 org.ros.internal.node.RosoutLogger info&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;情報: I heard: "Hello world! 84"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;2012/01/12 23:56:06 org.ros.internal.node.RosoutLogger info&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;情報: I heard: "Hello world! 85"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;2012/01/12 23:56:07 org.ros.internal.node.RosoutLogger info&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;情報: I heard: "Hello world! 86"&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;以上で実行できました。実行方法を含め、いままでのROSとはかなりイメージ違いますね。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;&lt;span class="anchor" id="line-46"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="line867"&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;&lt;span class="anchor" id="line-47"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-48"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;&lt;span class="anchor" id="line-49"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="line867"&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;&lt;span class="anchor" id="line-50"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line867"&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;&lt;span class="anchor" id="line-51"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="line867"&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;&lt;span class="anchor" id="line-52"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-53"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;&lt;span class="anchor" id="line-46"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="line867"&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;&lt;span class="anchor" id="line-47"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-48"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;&lt;span class="anchor" id="line-43"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="line867" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;&lt;span class="anchor" id="line-44"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-45"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="anchor" id="line-43"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="line867"&gt;&lt;span class="anchor" id="line-44"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-45"&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;span class="anchor" id="line-34"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;span class="anchor" id="line-35"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-520313376281875074?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/520313376281875074/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2012/01/rosjava_13.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/520313376281875074'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/520313376281875074'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2012/01/rosjava_13.html' title='rosjavaのチュートリアルをビルド＆実行'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-7269909354584634970</id><published>2012-01-12T23:42:00.000+09:00</published><updated>2012-01-19T22:21:24.017+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Install'/><category scheme='http://www.blogger.com/atom/ns#' term='rosjava'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>rosjavaインストール</title><content type='html'>（再掲します。）&lt;br /&gt;&lt;br /&gt;思い立ってrosjavaをやることにしました。&lt;br /&gt;javaはさっぱり分かりませんが、勉強します。&lt;br /&gt;（javaの勉強をした人は@makingさんおすすめの本を読みましょう。&lt;br /&gt;&lt;a href="http://blog.ik.am/entry/view/id/61/title/"&gt;http://blog.ik.am/entry/view/id/61/title/&lt;/a&gt;）&lt;br /&gt;&lt;br /&gt;とりあえずAndroid（嫁ケータイ）からROSを直接しゃべるのを目標にしたいと思います。&lt;br /&gt;いちおう簡単なAndroidアプリは作ってみました。&lt;br /&gt;（Androidもマーケットに出すには数千円かかるんですね・・・。）&lt;br /&gt;&lt;br /&gt;では本題です。&lt;br /&gt;&lt;br /&gt;まずはインストールです。&lt;br /&gt;以下を参考にします。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ros.org/wiki/rosjava/Tutorials/Install"&gt;http://ros.org/wiki/rosjava/Tutorials/Install&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;このチュートリアルによると、rosjavaは開発が盛んだからソースから入れてね。&lt;br /&gt;って書いて有ります。electricにもrosjavaパッケージはありますが、やはりソースから入れましょう。&lt;br /&gt;ベースとなるROSとしてunstableかelectricのインストールが必須です。&lt;br /&gt;私はelectricでやります。&lt;br /&gt;&lt;br /&gt;環境変数ROS_PACKAGE_PATHが通った場所で以下のようにします。&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;hg clone https://code.googlecode.com/p/rosjava rosjava_core&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;するとrosjava_coreスタックができます。hgコマンドがない、というひとはmercurialを入れましょう。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;一応これでインストールはOKです。&lt;br /&gt;&lt;br /&gt;makeとかビルドするパッケージでrosmakeでやるので必要ありません。&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;span class="anchor" id="line-43"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;span class="anchor" id="line-44"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-7269909354584634970?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/7269909354584634970/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2012/01/rosjava.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/7269909354584634970'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/7269909354584634970'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2012/01/rosjava.html' title='rosjavaインストール'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-6255224073691397887</id><published>2011-12-31T21:57:00.006+09:00</published><updated>2011-12-31T21:57:50.467+09:00</updated><title type='text'>よいお年を！</title><content type='html'>&lt;br /&gt;&lt;div class="section" id="platforms-by-distribution" style="margin-bottom: 1.5em; margin-left: 1em; margin-right: 1em;"&gt;&lt;div class="section" id="fuerte-turtle-mar-2012" style="margin-bottom: 1.5em; margin-left: 0em; margin-right: 0em; margin-top: 1.5em;"&gt;&lt;h2&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;あと２時間ほどで２０１１年もおしまいです。&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div&gt;２０１０年ほどは記事を書けませんで、ここの情報も古いものとなりつつありますが、&lt;/div&gt;&lt;div&gt;来年もほそぼそと続けていくつもりですのでよろしくお願いします。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;少なくとも以下のリリース時には記事を書きたいですね〜。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;来年もよろしくお願いします！！&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: sans-serif; font-weight: bold;"&gt;&lt;a href="http://www.ros.org/reps/rep-0003.html" style="font-weight: normal;"&gt;http://www.ros.org/reps/rep-0003.html&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 style="font-family: sans-serif; font-size: medium;"&gt;&lt;a class="toc-backref" href="http://www.ros.org/reps/rep-0003.html#id11" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; text-decoration: none;"&gt;Fuerte Turtle (Mar 2012)&lt;/a&gt;　（フォルテタートル）&lt;/h2&gt;&lt;ul class="simple" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; margin-bottom: 1em;"&gt;&lt;li&gt;Ubuntu Lucid&lt;/li&gt;&lt;li&gt;Ubuntu Oneiric&lt;/li&gt;&lt;li&gt;Ubuntu Precise&lt;/li&gt;&lt;li&gt;C++03&lt;/li&gt;&lt;li&gt;Boost 1.40&lt;/li&gt;&lt;li&gt;Lisp SBCL 1.0.x&lt;/li&gt;&lt;li&gt;Python 2.6&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div class="section" id="groovy-galapagos-aug-2012" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; margin-bottom: 1.5em; margin-left: 0em; margin-right: 0em; margin-top: 1.5em;"&gt;&lt;h2 style="font-family: sans-serif; font-size: medium;"&gt;&lt;a class="toc-backref" href="http://www.ros.org/reps/rep-0003.html#id12" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: black; text-decoration: none;"&gt;Groovy Galapagos (Aug 2012)&lt;/a&gt;　（グルーヴィーガラパゴス）&lt;/h2&gt;&lt;ul class="simple" style="margin-bottom: 1em;"&gt;&lt;li&gt;Ubuntu Oneiric&lt;/li&gt;&lt;li&gt;Ubuntu P&lt;/li&gt;&lt;li&gt;System libraries TBD&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="section" id="motivation" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; margin-bottom: 1.5em; margin-left: 1em; margin-right: 1em;"&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-6255224073691397887?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/6255224073691397887/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/12/blog-post_31.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6255224073691397887'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6255224073691397887'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/12/blog-post_31.html' title='よいお年を！'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-2520238039652655382</id><published>2011-12-23T21:48:00.000+09:00</published><updated>2011-12-23T22:33:29.660+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenRTM'/><title type='text'>RTミドルウェアコンテスト行ってきた</title><content type='html'>本日（２０１１年１２月２３日）に行われたRTミドルウェアコンテストに&lt;br /&gt;完全に僭越ながら審査員として行ってきました！&lt;br /&gt;&lt;br /&gt;みんなスーツの中、私は仕事じゃないので私服で審査してきました。&lt;br /&gt;結果は公式に任せるとして、非常に楽しくすごさせていただきました。&lt;br /&gt;&lt;br /&gt;RTミドルウェアとROSはいわばライバル関係で、&lt;br /&gt;日本人でありながら何故かその敵側を応援？しちゃっている私ですが、&lt;br /&gt;みなさん暖かく迎えてくださいました。&lt;br /&gt;&lt;br /&gt;全体的な印象としては&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;ysugaさんすげー&lt;/li&gt;&lt;li&gt;暖かく、いい雰囲気（使ってくれてありがとう、という人が多い）&lt;/li&gt;&lt;li&gt;教育や学生の発表が多い&lt;/li&gt;&lt;li&gt;みんなWindowsが好き&lt;/li&gt;&lt;li&gt;ドキュメントが超丁寧&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;このブログらしきことを書くと、いくつかROSに似たコンセプトのものがありました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;「移動ロボットのソフトウェア開発のための屋内環境シミュレータRTC」&lt;br /&gt;&lt;a href="http://www.openrtm.org/openrtm/ja/project/RTMContest2011_1115"&gt;www.openrtm.org/openrtm/ja/project/RTMContest2011_1115&lt;/a&gt;&lt;br /&gt;&lt;div&gt;これはstageっぽい。人もシミュレーションに入れられるところが違う。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ysugaさんの&lt;/div&gt;&lt;div&gt;&lt;div&gt;「RTno (汎用マイコンボードarduinoでRTコンポーネント対応デバイスを作るためのライブラリ）」&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.openrtm.org/openrtm/ja/project/rtno"&gt;www.openrtm.org/openrtm/ja/project/rtno&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これも同じようなコンセプトのものがROSにあります。&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.ros.org/wiki/rosserial"&gt;http://www.ros.org/wiki/rosserial&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.ros.org/wiki/rosserial_arduino"&gt;http://www.ros.org/wiki/rosserial_arduino&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;「初心者向けシステム開発支援用RTC」&lt;/div&gt;&lt;div&gt;&lt;a href="http://www.openrtm.org/openrtm/ja/project/RTMContest2011_1786"&gt;www.openrtm.org/openrtm/ja/project/RTMContest2011_1786&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;これはまるっきり&lt;a href="http://ros.org/wiki/rxplot"&gt;rxplot&lt;/a&gt;です。&lt;/div&gt;&lt;div&gt;データをオンラインでグラフ化してくれます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;RTMはとっつきにくい、といっている方が何人かいました。&lt;/div&gt;&lt;div&gt;ROSの方がシンプルなので始めるのは少しは簡単かもしれないと思いました。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;RTMの審査員をやってみて思ったのは、ROSとの比較で言うと、&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;依存関係を考慮した配布・ビルド方法がもう少し楽になるといいと思う。rospack・rosmake・rosdepは非常に強力。&lt;/li&gt;&lt;li&gt;自動生成したソースやら、すべてを１つのフォルダに入れて配っている人がいる気がする。もう少しソースの配置とかのルールを決めたほうがいいと思う。&lt;/li&gt;&lt;li&gt;RTC以外でライブラリを配る文化がもっと欲しい。PCLも最初はROSだったけど今はROSを切り離した。&lt;/li&gt;&lt;li&gt;ROSはドキュメントはプロむけ。RTMは親切過ぎないか心配。インストールや使い方はむつかしすぎるのをドキュメントでカバーしようとし過ぎなのかも？&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;なんにせよ、日本のロボット界ではソースを配る文化がなかったから、それを大幅に改善したRTミドルウェアプロジェクトの貢献は大きいと思った。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;以上偉そうに好き勝手書きました。&lt;/div&gt;&lt;div&gt;誤解・間違い等あると思いますので、コメントください。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-2520238039652655382?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/2520238039652655382/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/12/rt.html#comment-form' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/2520238039652655382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/2520238039652655382'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/12/rt.html' title='RTミドルウェアコンテスト行ってきた'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-130792311649839078</id><published>2011-12-09T23:37:00.000+09:00</published><updated>2011-12-09T23:37:35.067+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Original'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><category scheme='http://www.blogger.com/atom/ns#' term='rosjs'/><title type='text'>テレプレゼンスロボットの作り方</title><content type='html'>Makeに持っていったロボットの中身を軽く紹介しようと思います。&lt;br /&gt;&lt;br /&gt;まず全体構成は↓のようになっています。&lt;br /&gt;基本的にいままでつくってきたノードをrosbridgeでブラウザから動かしています。&lt;br /&gt;&lt;br /&gt;roombaは前に自作したotl_roombaパッケージのもの、lv2_armはアーム用に作ったノード、usb_camはboshのもの、battery_checkerはこの前紹介したノードでPCのバッテリーチェックをします。jtalk_nodeは日本語をしゃべるノードです。&lt;br /&gt;いずれも公開済みです。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-cG_9zmie6oo/TuIXNlP7FjI/AAAAAAAAM5A/6ncrV-4-ykw/s1600/Untitleddrawing+%25281%2529.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="300" src="http://2.bp.blogspot.com/-cG_9zmie6oo/TuIXNlP7FjI/AAAAAAAAM5A/6ncrV-4-ykw/s400/Untitleddrawing+%25281%2529.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;ブラウザでアクセスすると以下のように表示されます。&lt;br /&gt;ぐるぐるのところでルンバの速度を出力、スライダやボタンでロボットのカメラ操作、&lt;br /&gt;バッテリ残量を右上のアイコンで表示（@tera_kojiさんに作ってもらいました）、&lt;br /&gt;テキストボックスに文字を書くとロボットがしゃべってくれます。&lt;br /&gt;画面の上には大きくカメラ動画が流れます。&lt;br /&gt;javascript/HTML5で動的なページにしています。&lt;br /&gt;HTMLやjavascriptにはまったく詳しくないので苦労しました。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-STYwVKpRxJE/TuIYOUJbnVI/AAAAAAAAM5I/vZDtm51tXfk/s1600/brower.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-STYwVKpRxJE/TuIYOUJbnVI/AAAAAAAAM5I/vZDtm51tXfk/s320/brower.png" width="311" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;rosbridgeはsocketやwebsocketでROSプロトコルをしゃべってくれるサーバーで、javascriptからROSを簡単に使えます。&lt;br /&gt;rosbridgeはsubversionの最新版がおすすめです。安定版だとfirefoxだとうまく動きません。&lt;br /&gt;&lt;br /&gt;画像を動画で表示する方法は、&lt;br /&gt;&lt;br /&gt;HTMLに以下のように書いて、&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;lt;img src="img/camera_dummy.jpg" name="camera"&amp;nbsp;width="320" height="240"/&amp;gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;javascriptに以下のような感じで書きます。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; connection.addHandler('/usb_cam/image_raw',&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; function(msg) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; document.camera.src=msg.uri;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; });&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;これだけで/usb_cam/image_rawがガンガン送られてくれば動画になります。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;まあ、そんな感じです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-Fr3kfqEGYyA/TuIbQj2R1yI/AAAAAAAAM5Q/7zY1_kVSZyg/s1600/P1000315.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-Fr3kfqEGYyA/TuIbQj2R1yI/AAAAAAAAM5Q/7zY1_kVSZyg/s320/P1000315.JPG" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;例によって以下のリポジトリにおいておきました。整理もしていないので見せられる状態にないですが、ジョイスティックの部分とか、出せるように整理したいです。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://otl-ros-pkg.googlecode.com/svn/trunk/otl_util/otl_web/"&gt;http://otl-ros-pkg.googlecode.com/svn/trunk/otl_util/otl_web/&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-130792311649839078?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/130792311649839078/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/12/blog-post.html#comment-form' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/130792311649839078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/130792311649839078'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/12/blog-post.html' title='テレプレゼンスロボットの作り方'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-cG_9zmie6oo/TuIXNlP7FjI/AAAAAAAAM5A/6ncrV-4-ykw/s72-c/Untitleddrawing+%25281%2529.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-4193267003672502532</id><published>2011-12-08T23:55:00.001+09:00</published><updated>2011-12-09T23:45:52.293+09:00</updated><title type='text'>Make Tokyo Meeting 07ありがとう</title><content type='html'>Make Tokyo Meeting 07通称MTM07の出展が無事終わりました。&lt;br /&gt;&lt;br /&gt;このblogの読者に直にあえてうれしかったです。&lt;br /&gt;PCの前からロボットを動かしてくださったみなさん、ありがとうございました。&lt;br /&gt;（完成度が低くて申し訳ないです）&lt;br /&gt;&lt;br /&gt;FRISK Roombaも買っていただきありがとうございました。&lt;br /&gt;(快く一緒に参加してくださった@longjie0723さんありがとうございました！)&lt;br /&gt;&lt;a href="http://orientalrobotics.blogspot.com/2011/12/mtm07.html"&gt;http://orientalrobotics.blogspot.com/2011/12/mtm07.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;紹介記事がありますので紹介します。&lt;br /&gt;&lt;a href="http://ascii.jp/elem/000/000/654/654252/index-6.html"&gt;http://ascii.jp/elem/000/000/654/654252/index-6.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Makeは本当に面白いプロジェクトがいっぱいで、すごく刺激になり、楽しい２日間でした。&lt;br /&gt;ゆっくり見てまわるのもいいけど、また出たいな。&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-4193267003672502532?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/4193267003672502532/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/12/make-tokyo-meeting-07.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/4193267003672502532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/4193267003672502532'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/12/make-tokyo-meeting-07.html' title='Make Tokyo Meeting 07ありがとう'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-5178564608208717759</id><published>2011-12-03T13:42:00.001+09:00</published><updated>2011-12-03T13:43:11.196+09:00</updated><title type='text'>MTM07参加中！</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: center;"&gt;Make Tokyo Meeting 参加中！！&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://bit.ly/skQJYI"&gt;http://bit.ly/skQJYI&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;にてロボット遠隔操作＆Makeの体験ができるぞ！&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-Ls3L7r0uWb8/TtmogmEKJMI/AAAAAAAAM44/XwSSVVKQEMc/s1600/%25E5%2586%2599%25E7%259C%259F.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-Ls3L7r0uWb8/TtmogmEKJMI/AAAAAAAAM44/XwSSVVKQEMc/s320/%25E5%2586%2599%25E7%259C%259F.JPG" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-5178564608208717759?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/5178564608208717759/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/12/mtm07.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/5178564608208717759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/5178564608208717759'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/12/mtm07.html' title='MTM07参加中！'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-Ls3L7r0uWb8/TtmogmEKJMI/AAAAAAAAM44/XwSSVVKQEMc/s72-c/%25E5%2586%2599%25E7%259C%259F.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-4531275628182710235</id><published>2011-11-27T21:01:00.001+09:00</published><updated>2011-11-27T21:12:38.241+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雑談'/><title type='text'>MTM07参加します！</title><content type='html'>MTM07(&lt;a href="http://www.oreilly.co.jp/mtm/07/"&gt;http://www.oreilly.co.jp/mtm/07/&lt;/a&gt;)に出展します。&lt;br /&gt;&lt;br /&gt;出展名はOTL++で、Oriental Robotics (&lt;a href="http://orientalrobotics.blogspot.com/"&gt;http://orientalrobotics.blogspot.com/&lt;/a&gt;)さんといっしょにやります。&lt;br /&gt;タイトルはDIYロボティクスとかにした気がします。&lt;br /&gt;&lt;br /&gt;目玉はFRISK Roomba。フリスクケースにルンバ操作用Bluetoothモジュールが入っています。&lt;br /&gt;&lt;a href="http://orientalrobotics.blogspot.com/2011/02/friskroomba.html"&gt;http://orientalrobotics.blogspot.com/2011/02/friskroomba.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;こいつとKinectがあればROSの自律移動も試せるし、いろいろ遊べます。&lt;br /&gt;私がこれまでに上げた動画でもこれを使っています。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Kinectでもなんでもつながります。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/Dxzoomerowo/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Dxzoomerowo?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/Dxzoomerowo?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;パソコンからプログラム余裕です。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/M2yORZr2PN0/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/M2yORZr2PN0?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/M2yORZr2PN0?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/hIExpfrR3Co/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/hIExpfrR3Co?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/hIExpfrR3Co?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;あとはテレプレゼンスロボットを持って行きますので、「東京の会場までいけないよ」という人は自宅からMTM07に参加できちゃいます！&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;ブラウザから操作可能にしていますので後ほどアドレスを書きますので乞うご期待。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/BGD65s-9d58/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/BGD65s-9d58?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/BGD65s-9d58?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;他にもいろいろ持っていくので、ロボット好きなひとは是非遊びに来てくださいね。&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-4531275628182710235?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/4531275628182710235/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/11/mtm07.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/4531275628182710235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/4531275628182710235'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/11/mtm07.html' title='MTM07参加します！'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-5460909505329238829</id><published>2011-11-20T15:37:00.001+09:00</published><updated>2011-11-20T15:51:22.891+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Original'/><category scheme='http://www.blogger.com/atom/ns#' term='rospy'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>PC (Linux)のバッテリ残量を調べる</title><content type='html'>PC(Linux)のバッテリ容量をプログラムから知りたいことがあったのでPythonで作ってみました。&lt;br /&gt;例によって参考程度になればと貼っておきます。&lt;br /&gt;他にもっといい方法あれば教えてください。&lt;br /&gt;&lt;br /&gt;一応ノードも作りました。&lt;br /&gt;&lt;br /&gt;&lt;pre class="python" name="code"&gt;#! /usr/bin/env python&lt;br /&gt;&lt;br /&gt;import re&lt;br /&gt;&lt;br /&gt;class AcpiChecker():&lt;br /&gt;    """read /proc/acpi/battery/*** files for check the PC's battery"""&lt;br /&gt;    def __init__(self, battery_name):&lt;br /&gt;        self._info_path = "/proc/acpi/battery/" + battery_name + "/info"&lt;br /&gt;        self._state_path = "/proc/acpi/battery/" + battery_name + "/state"&lt;br /&gt;    def get_capacity(self):&lt;br /&gt;        f = open(self._info_path)&lt;br /&gt;        for line in f:&lt;br /&gt;            match = re.search(r'^last full capacity:\s*(\d+)', line)&lt;br /&gt;            if match:&lt;br /&gt;                capacity = match.groups()[0]&lt;br /&gt;        f.close()&lt;br /&gt;        return capacity&lt;br /&gt;&lt;br /&gt;    def get_state(self):&lt;br /&gt;        f = open(self._state_path)&lt;br /&gt;        for line in f:&lt;br /&gt;            match = re.search(r'^remaining capacity:\s*(\d+)', line)&lt;br /&gt;            if match:&lt;br /&gt;                state = match.groups()[0]&lt;br /&gt;        f.close()&lt;br /&gt;        return state&lt;br /&gt;&lt;br /&gt;    def get_rate(self):&lt;br /&gt;        return float(self.get_state()) / float(self.get_capacity())&lt;br /&gt;&lt;br /&gt;if __name__=='__main__':&lt;br /&gt;    checker = AcpiChecker('BAT0')&lt;br /&gt;    print checker.get_rate()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ノードはこんな感じでてきとーに作ってみました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="python" name="code"&gt;#! /usr/bin/env python&lt;br /&gt;&lt;br /&gt;import roslib&lt;br /&gt;roslib.load_manifest('otl_battery_checker')&lt;br /&gt;&lt;br /&gt;import rospy&lt;br /&gt;from std_msgs.msg import Float64&lt;br /&gt;from battery_check import AcpiChecker&lt;br /&gt;&lt;br /&gt;class BatteryCheckerNode():&lt;br /&gt;    """check battery and publish the charge rate"""&lt;br /&gt;    def __init__(self, battery_name='BAT0'):&lt;br /&gt;        self._checker = AcpiChecker(battery_name)&lt;br /&gt;        self._pub = rospy.Publisher('/pc/battery_rate', Float64)&lt;br /&gt;    def proc(self):&lt;br /&gt;        msg = Float64()&lt;br /&gt;        msg.data = self._checker.get_rate()&lt;br /&gt;        self._pub.publish(msg)&lt;br /&gt;&lt;br /&gt;if __name__=='__main__':&lt;br /&gt;    rospy.init_node('pc_battery_checker')&lt;br /&gt;    battery_name = 'BAT0'&lt;br /&gt;    if rospy.has_param('~device'):&lt;br /&gt;        battery_name = rospy.get_param('~device')&lt;br /&gt;    check = BatteryCheckerNode(battery_name)&lt;br /&gt;    rate = rospy.Rate(1)&lt;br /&gt;    while not rospy.is_shutdown():&lt;br /&gt;        check.proc()&lt;br /&gt;        rate.sleep()&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;参考にしたサイト&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://d.hatena.ne.jp/mzp/20081130/battery"&gt;http://d.hatena.ne.jp/mzp/20081130/battery&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-5460909505329238829?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/5460909505329238829/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/11/pc.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/5460909505329238829'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/5460909505329238829'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/11/pc.html' title='PC (Linux)のバッテリ残量を調べる'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-4385269625291373087</id><published>2011-11-19T23:08:00.001+09:00</published><updated>2011-11-19T23:14:41.170+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenRTM-aist'/><title type='text'>RT ミドルウエアコンテスト 2011 参加（ただしお金だけ）</title><content type='html'>突然ですが、RTミドルウェアコンテストに参加することにしました。&lt;br /&gt;&lt;br /&gt;ただし、ミドルウェアはまじめに書いたこと無いので協賛のほうです。（こんなんで審査していいんだろうか）&lt;br /&gt;&lt;a href="http://www.openrtm.org/rt/RTMcontest/2011/award.html"&gt;http://www.openrtm.org/rt/RTMcontest/2011/award.html&lt;/a&gt;&lt;br /&gt;勢いでつい本名で出してしまいました。&lt;br /&gt;&lt;br /&gt;一応このブログに関係あるっぽくしようと思って、「グローバルスタンダード賞」としました。&lt;br /&gt;ROSに負けない、国際的に認められそうなモジュールがあるといいなぁ。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-4385269625291373087?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/4385269625291373087/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/11/rt-2011.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/4385269625291373087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/4385269625291373087'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/11/rt-2011.html' title='RT ミドルウエアコンテスト 2011 参加（ただしお金だけ）'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-6353091106426065305</id><published>2011-11-06T13:57:00.001+09:00</published><updated>2011-11-06T13:58:40.693+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Keepon'/><title type='text'>キーポン届いた！</title><content type='html'>アメリカ在住の @kunikku92 さんからMy Keeponが届いたよ！&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-4j5cDCO-7ho/TrYQoZdxHtI/AAAAAAAAMiU/YeuzqR6z7ZE/s1600/IMG_0978.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-4j5cDCO-7ho/TrYQoZdxHtI/AAAAAAAAMiU/YeuzqR6z7ZE/s320/IMG_0978.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;開封の儀式！&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-rDgxWF0cpjk/TrYQraR0xuI/AAAAAAAAMic/gbr2oDnKsJw/s1600/IMG_0979.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://4.bp.blogspot.com/-rDgxWF0cpjk/TrYQraR0xuI/AAAAAAAAMic/gbr2oDnKsJw/s320/IMG_0979.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-Qe0R3Wn2WOE/TrYQuOzpllI/AAAAAAAAMik/YjhcJ7jlKX4/s1600/IMG_0982.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-Qe0R3Wn2WOE/TrYQuOzpllI/AAAAAAAAMik/YjhcJ7jlKX4/s320/IMG_0982.JPG" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-eBvcBF0bnw0/TrYQxIRPIaI/AAAAAAAAMis/Tm46D-fiQjU/s1600/IMG_0983.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-eBvcBF0bnw0/TrYQxIRPIaI/AAAAAAAAMis/Tm46D-fiQjU/s320/IMG_0983.JPG" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;キターーー！！！&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-0SIBkkYRbrI/TrYRLhZtvAI/AAAAAAAAMjg/uuawbFkryhw/s1600/IMG_0984.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-0SIBkkYRbrI/TrYRLhZtvAI/AAAAAAAAMjg/uuawbFkryhw/s320/IMG_0984.JPG" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;うしろはこんな感じ。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: -webkit-auto;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-_EAIDatbke4/TrYROqgnk_I/AAAAAAAAMjs/zOP7v6IWJDA/s1600/IMG_0985.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-_EAIDatbke4/TrYROqgnk_I/AAAAAAAAMjs/zOP7v6IWJDA/s320/IMG_0985.JPG" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;上から&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/-K6ZB8-hGsTk/TrYQz-YpVfI/AAAAAAAAMi0/kOAznu44Cpk/s1600/IMG_0986.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: -webkit-auto;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/-K6ZB8-hGsTk/TrYQz-YpVfI/AAAAAAAAMi0/kOAznu44Cpk/s320/IMG_0986.JPG" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;さあ出てらっしゃい。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/-7wF3Oha3zzw/TrYQ6EzZofI/AAAAAAAAMjI/V2-0Rw82SGE/s1600/IMG_0989.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-7wF3Oha3zzw/TrYQ6EzZofI/AAAAAAAAMjI/V2-0Rw82SGE/s320/IMG_0989.JPG" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;おおおおお！！！&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-MpTaVIYXUCQ/TrYQ3H6-8LI/AAAAAAAAMjA/MrqfmOBYvH4/s1600/IMG_0987.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-MpTaVIYXUCQ/TrYQ3H6-8LI/AAAAAAAAMjA/MrqfmOBYvH4/s320/IMG_0987.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-CcbrNHH8tZk/TrYRRaDdcBI/AAAAAAAAMj0/D8s4QecsCYE/s1600/IMG_0988.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-CcbrNHH8tZk/TrYRRaDdcBI/AAAAAAAAMj0/D8s4QecsCYE/s320/IMG_0988.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&amp;nbsp;　説明書もおしゃれ&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-frUhI8qrWIg/TrYRXblNV2I/AAAAAAAAMkE/wwT4d1G1j3s/s1600/IMG_0997.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://2.bp.blogspot.com/-frUhI8qrWIg/TrYRXblNV2I/AAAAAAAAMkE/wwT4d1G1j3s/s320/IMG_0997.JPG" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/oVmXplDDBbI/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/oVmXplDDBbI?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/oVmXplDDBbI?version=3&amp;f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;ちょっと動かして見ました。&lt;/div&gt;&lt;div style="text-align: center;"&gt;単三電池８本必要です。&lt;/div&gt;&lt;div style="text-align: center;"&gt;構造がひどくて入れるの超大変でした。&lt;br /&gt;動画で後半手拍子していますが、音楽に合わせて踊ります。&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-qI71kxB6fWw/TrYSRE2Q7xI/AAAAAAAAMkQ/ilHqWrCRRFY/s1600/IMG_0980.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://1.bp.blogspot.com/-qI71kxB6fWw/TrYSRE2Q7xI/AAAAAAAAMkQ/ilHqWrCRRFY/s320/IMG_0980.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;Willowグッズももらっちゃった！！やったー！！！&lt;/div&gt;&lt;div style="text-align: center;"&gt;ありがとう！！！&lt;/div&gt;&lt;div style="text-align: center;"&gt;下の光ってる奴はPR2チョコですね。なんと。。。&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;ありがとう @kunikku92 !!!&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-6353091106426065305?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/6353091106426065305/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/11/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6353091106426065305'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6353091106426065305'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/11/blog-post.html' title='キーポン届いた！'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-4j5cDCO-7ho/TrYQoZdxHtI/AAAAAAAAMiU/YeuzqR6z7ZE/s72-c/IMG_0978.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-7718455882666082435</id><published>2011-10-12T21:57:00.001+09:00</published><updated>2011-10-12T22:01:18.534+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Original'/><title type='text'>トランスフォーマー作ってみた</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;今日はROSでも僕の作品でもないものの紹介です。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;会社のイベントにアイデアコンテストというものがありまして、&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;今年のテーマが「未来の車」でした。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;私たちのチームでいろいろ考えた結果できた車がこれです。&lt;/div&gt;&lt;iframe allowfullscreen="" frameborder="0" height="315" src="http://www.youtube.com/embed/W7wgPdMN8S0" width="560"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;ロボットアームを収納し変身&lt;/li&gt;&lt;li&gt;ヘリを収納し発射&lt;/li&gt;&lt;li&gt;アームでヘリをキャッチしてドッキング！&lt;/li&gt;&lt;/ol&gt;&lt;div&gt;というオモシロロボットカーです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;アームでは、車から降りないで駐車券を取ったり、ドライブスルーを受け取ったりできます。&lt;/div&gt;&lt;div&gt;ヘリでは渋滞のときに先を見に行ったり、ヘリのカメラで本当のアラウンドビューができます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ドッキングは男の夢です。&lt;br /&gt;社内コンテストは優勝はできませんでしたが、結構満足行くものが出来ました。&lt;br /&gt;自慢です。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-7718455882666082435?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/7718455882666082435/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/10/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/7718455882666082435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/7718455882666082435'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/10/blog-post.html' title='トランスフォーマー作ってみた'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/W7wgPdMN8S0/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-6472800891592407737</id><published>2011-09-08T22:02:00.002+09:00</published><updated>2011-09-10T17:33:53.418+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pcl'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>ROS Electricのインストール(PCL1.1との共存)</title><content type='html'>さそっくelectricをインストールしようとしたのですが、依存関係が満たせないとのエラーになりました。(PCL1.1をスタンドアロンで入れたUbuntu 10.04で、ROS diamondbackが入った状態です。）&lt;br /&gt;&lt;br /&gt;しぼっていくと以下のエラーが原因のようです。&lt;br /&gt;&lt;br /&gt;依存: libeigen3-dev (= 3.0.1-1+ros4~lucid) しかし、3.0.2-1lucid3 はインストールされようとしています&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;これはスタンドアローンのPCLとの競合が原因のようです。&lt;/div&gt;&lt;div&gt;まずPCLを削除します。（ROS側で同じバージョンの1.1が入るので削除してもいい？？でしょう）&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$ sudo apt-get remove libpcl-1.1 libeigen3-dev&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;次に以下のファイルを削除するか、拡張子を変更するか、中身を"#"でコメントアウトします。&lt;/div&gt;&lt;div&gt;/etc/apt/sources.list.d/v-launchpad-jochen-sprickerhof-de-pcl-lucid.list&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;そして&lt;/div&gt;&lt;div&gt;$ sudo apt-get update&lt;/div&gt;&lt;div&gt;$ sudo apt-get install ros-electric-desktop-full&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;で入るはずです。&lt;/div&gt;&lt;div&gt;競合してしまうのは非常に残念ですね。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-6472800891592407737?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/6472800891592407737/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/09/ros-electricpcl11.html#comment-form' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6472800891592407737'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6472800891592407737'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/09/ros-electricpcl11.html' title='ROS Electricのインストール(PCL1.1との共存)'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-2556557924154271759</id><published>2011-09-08T22:02:00.001+09:00</published><updated>2011-09-10T17:34:20.162+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>ROS Electric on OSX (Lion)</title><content type='html'>ROS ElectricをMac(Lion)に入れようとしましたが、rosconsoleのビルドでこけています。&lt;br /&gt;&lt;br /&gt;調べたら以下のパッチがあったのでこれを使ってみたらうまく行きました。&lt;br /&gt;&lt;a href="https://code.ros.org/trac/ros/attachment/ticket/3626/ros_comm-1.6.2-rosconsole_clang_osx.patch"&gt;https://code.ros.org/trac/ros/attachment/ticket/3626/ros_comm-1.6.2-rosconsole_clang_osx.patch&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;以上メモでした。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-2556557924154271759?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/2556557924154271759/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/09/ros-electric-on-osx-lion.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/2556557924154271759'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/2556557924154271759'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/09/ros-electric-on-osx-lion.html' title='ROS Electric on OSX (Lion)'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-276137497288196511</id><published>2011-09-08T21:16:00.004+09:00</published><updated>2011-09-08T21:16:48.525+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雑談'/><title type='text'>iheart roboticsさんからTシャツもらった</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;iheart roboticsさんからROS Tシャツとiheartroboticsグッズを貰いました。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://www.iheartrobotics.com/"&gt;http://www.iheartrobotics.com/&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;エアメールで頂きました。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;みなさんもblogを一度は見たことがあると思います。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;Tシャツちょっと長いけどうれしい！&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;さっそくみんな自慢しましたがここでも自慢させてください。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;周りには通じる人少ないんで。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-eAmFyz4zVR8/TmijGFoH9pI/AAAAAAAAL9U/XPX3Lq7WiLU/s1600/CIMG1775.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://2.bp.blogspot.com/-eAmFyz4zVR8/TmijGFoH9pI/AAAAAAAAL9U/XPX3Lq7WiLU/s320/CIMG1775.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;お返しに折り紙の本でも贈ろうかと思っています。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-276137497288196511?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/276137497288196511/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/09/iheart-roboticst.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/276137497288196511'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/276137497288196511'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/09/iheart-roboticst.html' title='iheart roboticsさんからTシャツもらった'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-eAmFyz4zVR8/TmijGFoH9pI/AAAAAAAAL9U/XPX3Lq7WiLU/s72-c/CIMG1775.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-6484933383979174239</id><published>2011-09-02T18:38:00.001+09:00</published><updated>2011-09-10T22:28:22.099+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>joint_state_publisherメモ（再）</title><content type='html'>以前joint_state_publisherを紹介しました。&lt;br /&gt;&lt;a href="http://ros-robot.blogspot.com/2010/11/jointstatepublisher.html"&gt;http://ros-robot.blogspot.com/2010/11/jointstatepublisher.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ros.org/wiki/joint_state_publisher"&gt;http://www.ros.org/wiki/joint_state_publisher&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;詳しいやり方を書かなかったので自分のためのメモです。&lt;br /&gt;&lt;br /&gt;まず、joint_state_publisherをゲットします。&lt;br /&gt;そのためにはmercurialというソフトを必要としますので、いれましょう。&lt;br /&gt;&lt;br /&gt;$ sudo apt-get install mercurial&lt;br /&gt;&lt;br /&gt;次に以下のコマンドでjoint_state_publisherを取得します。&lt;br /&gt;&lt;br /&gt;$ hg clone https://kforge.ros.org/robotmodel/visualization&lt;br /&gt;&lt;br /&gt;そうしたら、hoge_descriptionというパッケージにurdf/hoge.xmlというurdfファイルを作ったとすると、以下のようなlaunchファイルを用意して、&lt;br /&gt;パラメータにファイルを読み込ませ、joint_state_publisherを駆動し、robot_state_publisherを動かし、rvizで表示します。&lt;br /&gt;joint_state_publisherがsensor_msgs/JointStateを発行し、それをrobot_state_publisherがtfに変換します。それをrvizが表示するのです。&lt;br /&gt;&lt;br /&gt;&lt;pre class="xml" name="code"&gt;&amp;lt;launch&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param name="robot_description" textfile="$(find hoge_description)/urdf/hoge.xml"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;param name="use_gui" value="true"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;node name="joint_state_publisher" pkg="joint_state_publisher" type="joint_state_publisher" /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher" /&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;node name="rviz" pkg="rviz" type="rviz"/&amp;gt;&lt;br /&gt;&amp;lt;/launch&amp;gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-6484933383979174239?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/6484933383979174239/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/09/jointstatepublisher.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6484933383979174239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6484933383979174239'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/09/jointstatepublisher.html' title='joint_state_publisherメモ（再）'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-4917780931921470331</id><published>2011-09-01T13:33:00.000+09:00</published><updated>2011-09-01T13:33:26.957+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>ROS Electric Emys release</title><content type='html'>Electric がリリースされました。&lt;br /&gt;&lt;a href="http://www.ros.org/wiki/electric"&gt;http://www.ros.org/wiki/electric&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Diamondbackからの変更点のうち私が気になったものをざっと見てみましょう。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;arm navigation (アームのプランニング系）1.0。&lt;/li&gt;&lt;ul&gt;&lt;li&gt;やっとアーム系がまともに使えるように&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Interactive markers (rvizで物体に触れるようになる）&lt;/li&gt;&lt;ul&gt;&lt;li&gt;rvizでインタラクティブに操作できるように&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;PCL1.1&amp;nbsp;&lt;/li&gt;&lt;ul&gt;&lt;li&gt;最新版が使えるようになりました&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;Android&lt;/li&gt;&lt;ul&gt;&lt;li&gt;javaによる実装のrosjavaがはいりました&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;tf&lt;/li&gt;&lt;ul&gt;&lt;li&gt;最大１００倍早くなったそうです。&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;sensor_msgs/Joy&lt;/li&gt;&lt;ul&gt;&lt;li&gt;joy/Joyメッセージがsensor_msgsに格上げです&lt;/li&gt;&lt;/ul&gt;&lt;li&gt;eigen, opencv2, yaml_cppなどがUbuntu nativeのものを利用するように&lt;/li&gt;&lt;li&gt;Unary stackの導入&lt;/li&gt;&lt;ul&gt;&lt;li&gt;スタックかつパッケージというUnary stackができた！&lt;/li&gt;&lt;li&gt;リリース単位のstackと機能単位のpackageという矛盾を解消するようです&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;&lt;div&gt;というくらいですかね。&lt;/div&gt;&lt;div&gt;まだインストールはしていません。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-4917780931921470331?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/4917780931921470331/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/09/ros-electric-emys-release.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/4917780931921470331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/4917780931921470331'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/09/ros-electric-emys-release.html' title='ROS Electric Emys release'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-6895915268218428992</id><published>2011-08-28T23:02:00.003+09:00</published><updated>2011-08-28T23:37:26.403+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='m3pi'/><category scheme='http://www.blogger.com/atom/ns#' term='mbed'/><title type='text'>m3pi robotを買った</title><content type='html'>@longjie0723 さんがm3pi robotというものを買うと言っていたので&lt;br /&gt;きっと面白いものだろうと思って買ってみました。&lt;br /&gt;（@longjie0723さんありがとうございます。）&lt;br /&gt;&lt;a href="http://www.pololu.com/catalog/product/2153"&gt;http://www.pololu.com/catalog/product/2153&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;流行りの（ちょっと古い?）mbedというマイコンが載った小型ロボットです。&lt;br /&gt;mbedの特徴はブラウザでプログラムが書ける、Ether使える、USBホスト機能ありなどですかね。&lt;br /&gt;センサはライントレース用の光センサがついています。&lt;br /&gt;いろいろ拡張ができそうです。&lt;br /&gt;&lt;br /&gt;手のひらサイズでものすごく速く動きます。&lt;br /&gt;とりあえず試しにLCDにOTLと表示したり、LEDつけて暴れさせたりして遊んでみました。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/4jRSt0Q7K6I/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/4jRSt0Q7K6I?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/4jRSt0Q7K6I?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;プログラムもC++で書けて非常に簡単です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.zmp.co.jp/e-nuvo/jp/k-team.html"&gt;既存のロボットだと７万円〜３０万円くらいします&lt;/a&gt;から（もちろんセンサ数とか全然違うかもしれませんが）&lt;br /&gt;プログラマブルな小型ロボットとしてはいい感じじゃないでしょうか？&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-6895915268218428992?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/6895915268218428992/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/08/m3pi-robot.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6895915268218428992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6895915268218428992'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/08/m3pi-robot.html' title='m3pi robotを買った'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-277196068783973235</id><published>2011-08-25T20:49:00.000+09:00</published><updated>2011-08-25T20:49:45.712+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pcl'/><title type='text'>Point Cloud Libraryを試す（その５：ユークリッドクラスター抽出）</title><content type='html'>いい加減PCLも飽きてきましたが、これもやっちゃいましょう。&lt;br /&gt;クラスタリングです。&lt;br /&gt;画像処理でもラベリングは結構使うと思います。&lt;br /&gt;それの３D版です。&lt;br /&gt;&lt;br /&gt;Euclidean Cluster Extraction&lt;br /&gt;&lt;a href="http://pointclouds.org/documentation/tutorials/cluster_extraction.php#cluster-extraction"&gt;http://pointclouds.org/documentation/tutorials/cluster_extraction.php#cluster-extraction&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;こちらのチュートリアルのほうがシンプルですが、私は可視化したかったので↓のように少し改造してビューワを付けました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;$ wget http://dev.pointclouds.org/attachments/download/157/table_scene_lms400.pcd&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;して、以下をcluster_extraction.cppとして保存です。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre class="c++" name="code"&gt;#include &amp;lt;pcl/ModelCoefficients.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/point_types.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/io/pcd_io.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/features/normal_3d.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/filters/extract_indices.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/filters/voxel_grid.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/kdtree/kdtree.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/sample_consensus/method_types.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/sample_consensus/model_types.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/segmentation/sac_segmentation.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/segmentation/extract_clusters.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/visualization/cloud_viewer.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;int&lt;br /&gt;main (int argc, char** argv)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; // Read in the cloud data&lt;br /&gt;&amp;nbsp; pcl::PCDReader reader;&lt;br /&gt;&amp;nbsp; pcl::PointCloud&amp;lt;pcl::PointXYZ&amp;gt;::Ptr cloud (new pcl::PointCloud&amp;lt;pcl::PointXYZ&amp;gt;);&lt;br /&gt;&amp;nbsp; reader.read ("table_scene_lms400.pcd", *cloud);&lt;br /&gt;&amp;nbsp; std::cout &amp;lt;&amp;lt; "PointCloud before filtering has: " &amp;lt;&amp;lt; cloud-&amp;gt;points.size () &amp;lt;&amp;lt; " data points." &amp;lt;&amp;lt; std::endl; //*&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // Create the filtering object: downsample the dataset using a leaf size of 1cm&lt;br /&gt;&amp;nbsp; pcl::VoxelGrid&amp;lt;pcl::PointXYZ&amp;gt; vg;&lt;br /&gt;&amp;nbsp; pcl::PointCloud&amp;lt;pcl::PointXYZ&amp;gt;::Ptr cloud_filtered (new pcl::PointCloud&amp;lt;pcl::PointXYZ&amp;gt;);&lt;br /&gt;&amp;nbsp; vg.setInputCloud (cloud);&lt;br /&gt;&amp;nbsp; vg.setLeafSize (0.01, 0.01, 0.01);&lt;br /&gt;&amp;nbsp; vg.filter (*cloud_filtered);&lt;br /&gt;&amp;nbsp; std::cout &amp;lt;&amp;lt; "PointCloud after filtering has: " &amp;lt;&amp;lt; cloud_filtered-&amp;gt;points.size () &amp;nbsp;&amp;lt;&amp;lt; " data points." &amp;lt;&amp;lt; std::endl; //*&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // Create the segmentation object for the planar model and set all the parameters&lt;br /&gt;&amp;nbsp; pcl::SACSegmentation&amp;lt;pcl::PointXYZ&amp;gt; seg;&lt;br /&gt;&amp;nbsp; pcl::PointIndices::Ptr inliers (new pcl::PointIndices);&lt;br /&gt;&amp;nbsp; pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients);&lt;br /&gt;&amp;nbsp; pcl::PointCloud&amp;lt;pcl::PointXYZ&amp;gt;::Ptr cloud_plane (new pcl::PointCloud&amp;lt;pcl::PointXYZ&amp;gt; ());&lt;br /&gt;&amp;nbsp; pcl::PCDWriter writer;&lt;br /&gt;&amp;nbsp; seg.setOptimizeCoefficients (true);&lt;br /&gt;&amp;nbsp; seg.setModelType (pcl::SACMODEL_PLANE);&lt;br /&gt;&amp;nbsp; seg.setMethodType (pcl::SAC_RANSAC);&lt;br /&gt;&amp;nbsp; seg.setMaxIterations (100);&lt;br /&gt;&amp;nbsp; seg.setDistanceThreshold (0.02);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; int i=0, nr_points = cloud_filtered-&amp;gt;points.size ();&lt;br /&gt;&amp;nbsp; while (cloud_filtered-&amp;gt;points.size () &amp;gt; 0.3 * nr_points)&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // Segment the largest planar component from the remaining cloud&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; seg.setInputCloud(cloud_filtered);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; seg.segment (*inliers, *coefficients); //*&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; if (inliers-&amp;gt;indices.size () == 0)&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;{&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp;std::cout &amp;lt;&amp;lt; "Could not estimate a planar model for the given dataset." &amp;lt;&amp;lt; std::endl;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp;break;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // Extract the planar inliers from the input cloud&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; pcl::ExtractIndices&amp;lt;pcl::PointXYZ&amp;gt; extract;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; extract.setInputCloud (cloud_filtered);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; extract.setIndices (inliers);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; extract.setNegative (false);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // Write the planar inliers to disk&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; extract.filter (*cloud_plane); //*&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; std::cout &amp;lt;&amp;lt; "PointCloud representing the planar component: " &amp;lt;&amp;lt; cloud_plane-&amp;gt;points.size () &amp;lt;&amp;lt; " data points." &amp;lt;&amp;lt; std::endl;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // Remove the planar inliers, extract the rest&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; extract.setNegative (true);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; extract.filter (*cloud_filtered); //*&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // Creating the KdTree object for the search method of the extraction&lt;br /&gt;&amp;nbsp; pcl::KdTree&amp;lt;pcl::PointXYZ&amp;gt;::Ptr tree (new pcl::KdTreeFLANN&amp;lt;pcl::PointXYZ&amp;gt;);&lt;br /&gt;&amp;nbsp; tree-&amp;gt;setInputCloud (cloud_filtered);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; std::vector&amp;lt;pcl::PointIndices&amp;gt; cluster_indices;&lt;br /&gt;&amp;nbsp; pcl::EuclideanClusterExtraction&amp;lt;pcl::PointXYZ&amp;gt; ec;&lt;br /&gt;&amp;nbsp; ec.setClusterTolerance (0.02); // 2cm&lt;br /&gt;&amp;nbsp; ec.setMinClusterSize (100);&lt;br /&gt;&amp;nbsp; ec.setMaxClusterSize (25000);&lt;br /&gt;&amp;nbsp; ec.setSearchMethod (tree);&lt;br /&gt;&amp;nbsp; ec.setInputCloud( cloud_filtered);&lt;br /&gt;&amp;nbsp; ec.extract (cluster_indices);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; int j = 0;&lt;br /&gt;&amp;nbsp; float colors[6][3] ={{255, 0, 0}, {0,255,0}, {0,0,255}, {255,255,0}, {0,255,255}, {255,0,255}};&lt;br /&gt;&amp;nbsp; pcl::visualization::CloudViewer viewer("cluster viewer");&lt;br /&gt;&amp;nbsp; pcl::PointCloud&amp;lt;pcl::PointXYZRGB&amp;gt;::Ptr cloud_cluster(new pcl::PointCloud&amp;lt;pcl::PointXYZRGB&amp;gt;);&lt;br /&gt;&amp;nbsp; pcl::copyPointCloud(*cloud_filtered, *cloud_cluster);&lt;br /&gt;&amp;nbsp; for (std::vector&amp;lt;pcl::PointIndices&amp;gt;::const_iterator it = cluster_indices.begin (); it != cluster_indices.end (); ++it)&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; for (std::vector&amp;lt;int&amp;gt;::const_iterator pit = it-&amp;gt;indices.begin (); pit != it-&amp;gt;indices.end (); pit++) {&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;cloud_cluster-&amp;gt;points[*pit].r = colors[j%6][0];&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;cloud_cluster-&amp;gt;points[*pit].g = colors[j%6][1];&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt;cloud_cluster-&amp;gt;points[*pit].b = colors[j%6][2];&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; std::cout &amp;lt;&amp;lt; "PointCloud representing the Cluster: " &amp;lt;&amp;lt; cloud_cluster-&amp;gt;points.size () &amp;lt;&amp;lt; " data points." &amp;lt;&amp;lt; std::endl;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; std::stringstream ss;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; ss &amp;lt;&amp;lt; "cloud_cluster_" &amp;lt;&amp;lt; j &amp;lt;&amp;lt; ".pcd";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; writer.write&amp;lt;pcl::PointXYZRGB&amp;gt; (ss.str (), *cloud_cluster, false); //*&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; j++;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; viewer.showCloud (cloud_cluster); &lt;br /&gt;&amp;nbsp; while (!viewer.wasStopped())&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; sleep (1);&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; return (0);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;するとこんな感じです。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/8111afe3de6f0f8c730f990a0f55c3a2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://gyazo.com/8111afe3de6f0f8c730f990a0f55c3a2.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;ちなみに元データはこんな感じ。テーブル上面と床が削除されています。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/a71dd48fcecd3dee62b63d81003ee63e.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://gyazo.com/a71dd48fcecd3dee62b63d81003ee63e.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;少しだけコードを読むと、&lt;br /&gt;最初にポイントクラウドをファイルから読み込み、pcl::VexelGridを使ってダウンサンプリングしています。&lt;br /&gt;&lt;a href="http://pointclouds.org/documentation/tutorials/voxel_grid.php#voxelgrid"&gt;ダウンサンプリングのチュートリアル&lt;/a&gt;もありますが簡単なので飛ばしました。&lt;br /&gt;setLeafSizeで10mm刻みのグリッドでサンプリングしていますね。&lt;br /&gt;&lt;br /&gt;次に前回やった平面検出で平面を削除しています。&lt;br /&gt;複数の平面検出をどうやるのかと思ったら、検出した領域を削除して、削除したもに対してもう一度検出することでやっているみたいです。&lt;br /&gt;while(...)のところです。&lt;br /&gt;&lt;br /&gt;で、今回のキモはpcl::KdTreeを使ってEuclideanClusterEtractionしているところです。&lt;br /&gt;setClusterToleranceでマージする最大距離を指定して、最小、最大のパーティクル数を指定しているようです。&lt;br /&gt;&lt;br /&gt;CMakeListx.txtはいつもと同じです。&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #eeffcc; font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif; font-size: 14px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="background-color: #f8f8f8; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 0.95em; letter-spacing: 0.015em; line-height: 15px; overflow-x: auto; overflow-y: hidden; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em; white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="nb" style="color: #007020;"&gt;cmake_minimum_required&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s" style="color: #4070a0;"&gt;VERSION&lt;/span&gt; &lt;span class="s" style="color: #4070a0;"&gt;2.8&lt;/span&gt; &lt;span class="s" style="color: #4070a0;"&gt;FATAL_ERROR&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;project&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s" style="color: #4070a0;"&gt;cluster_extraction&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;find_package&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s" style="color: #4070a0;"&gt;PCL&lt;/span&gt; &lt;span class="s" style="color: #4070a0;"&gt;1.1&lt;/span&gt; &lt;span class="s" style="color: #4070a0;"&gt;REQUIRED&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;include_directories&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;${&lt;/span&gt;&lt;span class="nv" style="color: #bb60d5;"&gt;PCL_INCLUDE_DIRS&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;link_directories&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;${&lt;/span&gt;&lt;span class="nv" style="color: #bb60d5;"&gt;PCL_LIBRARY_DIRS&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;add_definitions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;${&lt;/span&gt;&lt;span class="nv" style="color: #bb60d5;"&gt;PCL_DEFINITIONS&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;add_executable&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s" style="color: #4070a0;"&gt;cluster_extraction&lt;/span&gt; &lt;span class="s" style="color: #4070a0;"&gt;cluster_extraction.cpp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;target_link_libraries&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s" style="color: #4070a0;"&gt;cluster_extraction&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;${&lt;/span&gt;&lt;span class="nv" style="color: #bb60d5;"&gt;PCL_LIBRARIES&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;ここまでで、机の上にある物体をラベリングして認識することができるようになりました。&lt;br /&gt;あとは&lt;a href="http://pointclouds.org/documentation/tutorials/passthrough.php#passthrough"&gt;フィルタのチュートリアル&lt;/a&gt;でもやればひと通り終わりかな？&lt;br /&gt;&lt;br /&gt;大体感じはつかめたのでPCL本体はこれくらいにしておきましょう。&lt;br /&gt;&lt;br /&gt;これで少しは面白いことができるかもしれません。&lt;br /&gt;&lt;br /&gt;次はROSとのからみを見てみます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-277196068783973235?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/277196068783973235/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/08/point-cloud-library_25.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/277196068783973235'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/277196068783973235'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/08/point-cloud-library_25.html' title='Point Cloud Libraryを試す（その５：ユークリッドクラスター抽出）'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-2997685905115526895</id><published>2011-08-24T21:52:00.001+09:00</published><updated>2011-08-24T23:16:37.955+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pcl'/><title type='text'>Point Cloud Libraryを試す（その４：平面抽出）</title><content type='html'>今回はポイントクラウドから平面を抽出します。&lt;br /&gt;&lt;br /&gt;その前に、前回使ったPointXYZRGBの色の部分がfloat rgbとなっていて気になったので調べてみました。&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: white; font-family: 'Lucida Grande', Verdana, Geneva, Arial, sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="fragment"&gt;&lt;pre class="fragment" style="background-color: #fbfcfd; border-bottom-color: rgb(196, 207, 229); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(196, 207, 229); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(196, 207, 229); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(196, 207, 229); border-top-style: solid; border-top-width: 1px; font-family: monospace, fixed; line-height: 15px; margin-bottom: 4px; margin-left: 2px; margin-right: 8px; margin-top: 4px; overflow-x: auto; overflow-y: auto; padding-bottom: 4px; padding-left: 6px; padding-right: 6px; padding-top: 4px; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;&lt;span class="comment" style="color: maroon;"&gt;// pack r/g/b into rgb&lt;/span&gt;&lt;br /&gt; uint8_t &lt;a class="code" href="http://docs.pointclouds.org/1.1.0/structpcl_1_1___point_x_y_z_r_g_b.html#a630701126cad2bc30758f567f87997ea" style="color: #4665a2; text-decoration: none;"&gt;r&lt;/a&gt; = 255, &lt;a class="code" href="http://docs.pointclouds.org/1.1.0/structpcl_1_1___point_x_y_z_r_g_b.html#ae71091f11681614416b91c159fbea302" style="color: #4665a2; text-decoration: none;"&gt;g&lt;/a&gt; = 0, &lt;a class="code" href="http://docs.pointclouds.org/1.1.0/structpcl_1_1___point_x_y_z_r_g_b.html#a52cc42e83f321268159f4e239c4d8256" style="color: #4665a2; text-decoration: none;"&gt;b&lt;/a&gt; = 0;    &lt;span class="comment" style="color: maroon;"&gt;// Example: Red color&lt;/span&gt;&lt;br /&gt; uint32_t &lt;a class="code" href="http://docs.pointclouds.org/1.1.0/structpcl_1_1___point_x_y_z_r_g_b.html#abc6d47288c7ec8af953ffe4ddd889b70" style="color: #4665a2; text-decoration: none;"&gt;rgb&lt;/a&gt; = ((uint32_t)&lt;a class="code" href="http://docs.pointclouds.org/1.1.0/structpcl_1_1___point_x_y_z_r_g_b.html#a630701126cad2bc30758f567f87997ea" style="color: #4665a2; text-decoration: none;"&gt;r&lt;/a&gt; &amp;lt;&amp;lt; 16 | (uint32_t)&lt;a class="code" href="http://docs.pointclouds.org/1.1.0/structpcl_1_1___point_x_y_z_r_g_b.html#ae71091f11681614416b91c159fbea302" style="color: #4665a2; text-decoration: none;"&gt;g&lt;/a&gt; &amp;lt;&amp;lt; 8 | (uint32_t)&lt;a class="code" href="http://docs.pointclouds.org/1.1.0/structpcl_1_1___point_x_y_z_r_g_b.html#a52cc42e83f321268159f4e239c4d8256" style="color: #4665a2; text-decoration: none;"&gt;b&lt;/a&gt;);&lt;br /&gt; p.rgb = *&lt;span class="keyword" style="color: green;"&gt;reinterpret_cast&amp;lt;&lt;/span&gt;&lt;span class="keywordtype" style="color: #604020;"&gt;float&lt;/span&gt;*&lt;span class="keyword" style="color: green;"&gt;&amp;gt;&lt;/span&gt;(&amp;amp;&lt;a class="code" href="http://docs.pointclouds.org/1.1.0/structpcl_1_1___point_x_y_z_r_g_b.html#abc6d47288c7ec8af953ffe4ddd889b70" style="color: #4665a2; text-decoration: none;"&gt;rgb&lt;/a&gt;);&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div&gt;&lt;div style="font-family: monospace, fixed;"&gt;↑のような感じで使うみたいです。&lt;/div&gt;&lt;div style="font-family: monospace, fixed;"&gt;悪名高きreinterpret_castか！と思ったら、&lt;/div&gt;&lt;div style="font-family: monospace, fixed;"&gt;ver.1.1.0からはr,g,b変数も使えるみたいで、&lt;/div&gt;&lt;div style="font-family: monospace, fixed;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;point.r = 255;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: monospace, fixed;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;point.g = 100;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: monospace, fixed;"&gt;&lt;span class="Apple-style-span" style="font-size: x-small;"&gt;point.b = 10;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: monospace, fixed;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: monospace, fixed;"&gt;みたいに指定できるようです。&lt;/div&gt;&lt;div style="font-family: monospace, fixed;"&gt;&lt;span class="Apple-style-span" style="font-family: 'VL PGothic';"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br class="Apple-interchange-newline" /&gt;PCLのAPIリファレンスはこちらです。&lt;br /&gt;&lt;a href="http://docs.pointclouds.org/1.1.0/"&gt;Point Cloud Library (PCL): PCL API Documentation&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="font-family: monospace, fixed;"&gt;という小ネタを挟みまして、今回は平面検出です。&lt;/div&gt;&lt;div style="font-family: monospace, fixed;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: monospace, fixed;"&gt;↓のようにPointCloudから平面っぽいところを切りだしてくれるはずです。&lt;/div&gt;&lt;div style="font-family: monospace, fixed;"&gt;&lt;a href="http://www.youtube.com/watch?v=ZTK7NR1Xx4c&amp;amp;feature=player_embedded"&gt;http://www.youtube.com/watch?v=ZTK7NR1Xx4c&amp;amp;feature=player_embedded&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: monospace, fixed;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: monospace, fixed;"&gt;チュートリアルはこちら&lt;/div&gt;&lt;div style="font-family: monospace, fixed;"&gt;&lt;a href="http://pointclouds.org/documentation/tutorials/planar_segmentation.php#planar-segmentation"&gt;http://pointclouds.org/documentation/tutorials/planar_segmentation.php#planar-segmentation&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: monospace, fixed;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: monospace, fixed;"&gt;チュートリアルにあるコードは簡単なんですが、ビューワが付いていないので、ビューワを付けてみました。&lt;br /&gt;以下をplanar_segmentation.cppとして保存してください。&lt;br /&gt;&lt;div style="font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;pre class="c++" name="code"&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/ModelCoefficients.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/io/pcd_io.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/point_types.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/sample_consensus/method_types.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/sample_consensus/model_types.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/segmentation/sac_segmentation.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/visualization/cloud_viewer.h&amp;gt;&lt;br /&gt;&lt;br /&gt;int&lt;br /&gt;main (int argc, char** argv)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; pcl::PointCloud&amp;lt;pcl::PointXYZRGB&amp;gt; cloud;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // Fill in the cloud data&lt;br /&gt;&amp;nbsp; cloud.width &amp;nbsp;= 15;&lt;br /&gt;&amp;nbsp; cloud.height = 10;&lt;br /&gt;&amp;nbsp; cloud.points.resize (cloud.width * cloud.height);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // Generate the data&lt;br /&gt;&amp;nbsp; size_t i;&lt;br /&gt;&amp;nbsp; for (i = 0; i &amp;lt; cloud.points.size ()/2; ++i)&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // 平面におく&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cloud.points[i].z = 0.1 * rand () / (RAND_MAX + 1.0);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cloud.points[i].r = 255;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cloud.points[i].g = 255;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cloud.points[i].b = 255;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; for (; i &amp;lt; cloud.points.size (); ++i)&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; // ちらばらせる&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cloud.points[i].z = 1024 * rand () / (RAND_MAX + 1.0);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cloud.points[i].r = 255;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cloud.points[i].g = 255;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cloud.points[i].b = 255;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // Set a few outliers&lt;br /&gt;&amp;nbsp; cloud.points[0].z = 2.0;&lt;br /&gt;&amp;nbsp; cloud.points[3].z = -2.0;&lt;br /&gt;&amp;nbsp; cloud.points[6].z = 4.0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; std::cerr &amp;lt;&amp;lt; "Point cloud data: " &amp;lt;&amp;lt; cloud.points.size () &amp;lt;&amp;lt; " points" &amp;lt;&amp;lt; std::endl;&lt;br /&gt;&amp;nbsp; for (size_t i = 0; i &amp;lt; cloud.points.size (); ++i)&lt;br /&gt;&amp;nbsp; &amp;nbsp; std::cerr &amp;lt;&amp;lt; " &amp;nbsp; &amp;nbsp;" &amp;lt;&amp;lt; cloud.points[i].x &amp;lt;&amp;lt; " "&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;&amp;lt; cloud.points[i].y &amp;lt;&amp;lt; " "&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;&amp;lt; cloud.points[i].z &amp;lt;&amp;lt; std::endl;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients);&lt;br /&gt;&amp;nbsp; pcl::PointIndices::Ptr inliers (new pcl::PointIndices);&lt;br /&gt;&amp;nbsp; // Create the segmentation object&lt;br /&gt;&amp;nbsp; pcl::SACSegmentation&amp;lt;pcl::PointXYZRGB&amp;gt; seg;&lt;br /&gt;&amp;nbsp; // Optional&lt;br /&gt;&amp;nbsp; seg.setOptimizeCoefficients (true);&lt;br /&gt;&amp;nbsp; // Mandatory&lt;br /&gt;&amp;nbsp; seg.setModelType (pcl::SACMODEL_PLANE);&lt;br /&gt;&amp;nbsp; seg.setMethodType (pcl::SAC_RANSAC);&lt;br /&gt;&amp;nbsp; seg.setDistanceThreshold (0.1);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; seg.setInputCloud (cloud.makeShared ());&lt;br /&gt;&amp;nbsp; seg.segment (*inliers, *coefficients);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; if (inliers-&amp;gt;indices.size () == 0)&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; PCL_ERROR ("Could not estimate a planar model for the given dataset.");&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; return (-1);&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; std::cerr &amp;lt;&amp;lt; "Model coefficients: " &amp;lt;&amp;lt; coefficients-&amp;gt;values[0] &amp;lt;&amp;lt; " "&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp;&amp;lt;&amp;lt; coefficients-&amp;gt;values[1] &amp;lt;&amp;lt; " "&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp;&amp;lt;&amp;lt; coefficients-&amp;gt;values[2] &amp;lt;&amp;lt; " "&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp;&amp;lt;&amp;lt; coefficients-&amp;gt;values[3] &amp;lt;&amp;lt; std::endl;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; std::cerr &amp;lt;&amp;lt; "Model inliers: " &amp;lt;&amp;lt; inliers-&amp;gt;indices.size () &amp;lt;&amp;lt; std::endl;&lt;br /&gt;&amp;nbsp; for (size_t i = 0; i &amp;lt; inliers-&amp;gt;indices.size (); ++i) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; std::cerr &amp;lt;&amp;lt; inliers-&amp;gt;indices[i] &amp;lt;&amp;lt; " &amp;nbsp; &amp;nbsp;" &amp;lt;&amp;lt; cloud.points[inliers-&amp;gt;indices[i]].x &amp;lt;&amp;lt; " "&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;&amp;lt; cloud.points[inliers-&amp;gt;indices[i]].y &amp;lt;&amp;lt; " "&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt;	&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;&amp;lt; cloud.points[inliers-&amp;gt;indices[i]].z &amp;lt;&amp;lt; std::endl;&lt;br /&gt;&amp;nbsp; &amp;nbsp; cloud.points[inliers-&amp;gt;indices[i]].r = 255;&lt;br /&gt;&amp;nbsp; &amp;nbsp; cloud.points[inliers-&amp;gt;indices[i]].g = 0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; cloud.points[inliers-&amp;gt;indices[i]].b = 0;&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; pcl::visualization::CloudViewer viewer("Cloud Viewer");&lt;br /&gt;&lt;br /&gt;&amp;nbsp; viewer.showCloud(cloud.makeShared());&lt;br /&gt;&lt;br /&gt;&amp;nbsp; while (!viewer.wasStopped ())&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; return (0);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;するとこんな感じで平面っぽいところにあるポイントが赤く表示されました。&lt;br /&gt;&lt;br /&gt;CMakeLists.txtはいつもと同じです。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;span class="Apple-style-span" style="background-color: rgba(255, 255, 255, 0.949219);"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="highlight-cmake" style="font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif; font-size: 14px;"&gt;&lt;table class="highlighttable" style="border-collapse: collapse; margin-bottom: 0px; margin-left: 0.5em; margin-right: -0.5em; margin-top: 0px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code" style="padding-bottom: 0px; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0px;"&gt;&lt;div class="highlight" style="background-attachment: initial; background-clip: initial; background-color: #eeffcc; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"&gt;&lt;pre style="background-color: #f8f8f8; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 0.95em; letter-spacing: 0.015em; line-height: 15px; overflow-x: auto; overflow-y: hidden; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em; white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="nb" style="color: #007020;"&gt;cmake_minimum_required&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s" style="color: #4070a0;"&gt;VERSION&lt;/span&gt; &lt;span class="s" style="color: #4070a0;"&gt;2.8&lt;/span&gt; &lt;span class="s" style="color: #4070a0;"&gt;FATAL_ERROR&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;project&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s" style="color: #4070a0;"&gt;planar_segmentation&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;find_package&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s" style="color: #4070a0;"&gt;PCL&lt;/span&gt; &lt;span class="s" style="color: #4070a0;"&gt;1.1&lt;/span&gt; &lt;span class="s" style="color: #4070a0;"&gt;REQUIRED&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;include_directories&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;${&lt;/span&gt;&lt;span class="nv" style="color: #bb60d5;"&gt;PCL_INCLUDE_DIRS&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;link_directories&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;${&lt;/span&gt;&lt;span class="nv" style="color: #bb60d5;"&gt;PCL_LIBRARY_DIRS&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;add_definitions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;${&lt;/span&gt;&lt;span class="nv" style="color: #bb60d5;"&gt;PCL_DEFINITIONS&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;add_executable&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s" style="color: #4070a0;"&gt;planar_segmentation&lt;/span&gt; &lt;span class="s" style="color: #4070a0;"&gt;planar_segmentation.cpp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;target_link_libraries&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s" style="color: #4070a0;"&gt;planar_segmentation&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;${&lt;/span&gt;&lt;span class="nv" style="color: #bb60d5;"&gt;PCL_LIBRARIES&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;div class="highlight-cmake"&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;$ cmake .&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;$ make&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;でビルドして、&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;$ ./planar_segmentation&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="text-align: left;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px;"&gt;で実行してみます。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; font-family: monospace, fixed; font-size: 13px; text-align: center;"&gt;&lt;a href="http://gyazo.com/9b12ef654f09da065e9ef093baf61674.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://gyazo.com/9b12ef654f09da065e9ef093baf61674.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="font-family: monospace, fixed; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: monospace, fixed; font-size: 13px;"&gt;&lt;a href="http://docs.pointclouds.org/trunk/classpcl_1_1_s_a_c_segmentation.html"&gt;SACSegmentation&lt;/a&gt;というClassが今回の本質のようです。ここにSACMODEL_PLANE＝平面モデルを指定したり、&lt;/div&gt;&lt;div style="font-family: monospace, fixed; font-size: 13px;"&gt;setDistanceThresholdでモデルとの誤差の閾値を指定しています。setMethodTypeで計算方法を選択（今回はSAC_RANSAC）しています。RANSACは確率的なモデル推定だったきがします。&lt;/div&gt;&lt;div style="font-family: monospace, fixed; font-size: 13px;"&gt;coefficients-&amp;gt;valuesに入っているのは推定されたモデル&lt;/div&gt;&lt;div style="font-family: monospace, fixed; font-size: 13px;"&gt;ax+by+cz+d=0の平面の式になります。&lt;/div&gt;&lt;div style="font-family: monospace, fixed; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: monospace, fixed; font-size: 13px;"&gt;これで平面上にあるポイントが検出できました。&lt;/div&gt;&lt;div style="font-family: monospace, fixed; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: monospace, fixed; font-size: 13px;"&gt;さらにKinectでやってみました。前回のKinectのキャプチャサンプルに今回のを合体させてみました。&lt;/div&gt;&lt;div style="font-family: monospace, fixed; font-size: 13px;"&gt;一番広い平面が真っ赤にそまります。これは楽しい！&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: monospace, fixed; font-size: 13px; text-align: center;"&gt;&lt;a href="http://gyazo.com/a6864b9819656055a50c7448d47465e8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://gyazo.com/a6864b9819656055a50c7448d47465e8.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: monospace, fixed; font-size: 13px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: monospace, fixed; font-size: 13px;"&gt;一応ソースコードです。適当です。&lt;/div&gt;&lt;pre class="c++" name="code"&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/ModelCoefficients.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/io/openni_grabber.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/io/pcd_io.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/point_types.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/sample_consensus/method_types.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/sample_consensus/model_types.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/segmentation/sac_segmentation.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/visualization/cloud_viewer.h&amp;gt;&lt;br /&gt;&lt;br /&gt;void segmentate(pcl::PointCloud&amp;lt;pcl::PointXYZRGB&amp;gt;&amp;amp; cloud, double threshould) {&lt;br /&gt;  pcl::ModelCoefficients::Ptr coefficients (new pcl::ModelCoefficients);&lt;br /&gt;  pcl::PointIndices::Ptr inliers (new pcl::PointIndices);&lt;br /&gt;  // Create the segmentation object&lt;br /&gt;  pcl::SACSegmentation&amp;lt;pcl::PointXYZRGB&amp;gt; seg;&lt;br /&gt;  // Optional&lt;br /&gt;  seg.setOptimizeCoefficients (true);&lt;br /&gt;  // Mandatory&lt;br /&gt;  seg.setModelType (pcl::SACMODEL_PLANE);&lt;br /&gt;  seg.setMethodType (pcl::SAC_RANSAC);&lt;br /&gt;  seg.setDistanceThreshold (threshould);&lt;br /&gt;&lt;br /&gt;  seg.setInputCloud (cloud.makeShared ());&lt;br /&gt;  seg.segment (*inliers, *coefficients);&lt;br /&gt;&lt;br /&gt;  for (size_t i = 0; i &amp;lt; inliers-&amp;gt;indices.size (); ++i) {&lt;br /&gt;    cloud.points[inliers-&amp;gt;indices[i]].r = 255;&lt;br /&gt;    cloud.points[inliers-&amp;gt;indices[i]].g = 0;&lt;br /&gt;    cloud.points[inliers-&amp;gt;indices[i]].b = 0;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt; class SimpleOpenNIViewer&lt;br /&gt; {&lt;br /&gt;   public:&lt;br /&gt;     SimpleOpenNIViewer () : viewer ("PCL OpenNI Viewer") {}&lt;br /&gt;&lt;br /&gt;     void cloud_cb_ (const pcl::PointCloud&amp;lt;pcl::PointXYZRGB&amp;gt;::ConstPtr &amp;amp;cloud)&lt;br /&gt;     {&lt;br /&gt;       if (!viewer.wasStopped()) {&lt;br /&gt;	 pcl::PointCloud&amp;lt;pcl::PointXYZRGB&amp;gt; segmented_cloud(*cloud);&lt;br /&gt;	 segmentate(segmented_cloud, 0.01);&lt;br /&gt;         viewer.showCloud (segmented_cloud.makeShared());&lt;br /&gt;       }&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     void run ()&lt;br /&gt;     {&lt;br /&gt;       pcl::Grabber* interface = new pcl::OpenNIGrabber();&lt;br /&gt;&lt;br /&gt;       boost::function&amp;lt;void (const pcl::PointCloud&amp;lt;pcl::PointXYZRGB&amp;gt;::ConstPtr&amp;amp;)&amp;gt; f =&lt;br /&gt;         boost::bind (&amp;amp;SimpleOpenNIViewer::cloud_cb_, this, _1);&lt;br /&gt;&lt;br /&gt;       interface-&amp;gt;registerCallback (f);&lt;br /&gt;       interface-&amp;gt;start ();&lt;br /&gt;       while (!viewer.wasStopped())&lt;br /&gt;       {&lt;br /&gt;         sleep (1);&lt;br /&gt;       }&lt;br /&gt;&lt;br /&gt;       interface-&amp;gt;stop ();&lt;br /&gt;     }&lt;br /&gt;&lt;br /&gt;     pcl::visualization::CloudViewer viewer;&lt;br /&gt; };&lt;br /&gt;&lt;br /&gt; int main ()&lt;br /&gt; {&lt;br /&gt;   SimpleOpenNIViewer v;&lt;br /&gt;   v.run ();&lt;br /&gt;   return 0;&lt;br /&gt; }&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-2997685905115526895?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/2997685905115526895/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/08/pclapi-point-cloud-library-pcl-pcl-api.html#comment-form' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/2997685905115526895'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/2997685905115526895'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/08/pclapi-point-cloud-library-pcl-pcl-api.html' title='Point Cloud Libraryを試す（その４：平面抽出）'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-7071030526375518312</id><published>2011-08-22T22:35:00.000+09:00</published><updated>2011-08-22T22:35:58.858+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pcl'/><title type='text'>Point Cloud Libraryを試す（その３：Kinectからデータ取得）</title><content type='html'>いよいよKinectを使ってデータを取得してみます。&lt;br /&gt;&lt;a href="http://pointclouds.org/documentation/tutorials/openni_grabber.php#openni-grabber"&gt;http://pointclouds.org/documentation/tutorials/openni_grabber.php#openni-grabber&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;データが取得できれば、これまでやった、ファイルへの保存、ビューワでの表示、がとりあえずできるようになるわけです。&lt;br /&gt;公式のサンプルコードは動かないので↓のように修正しました。&lt;br /&gt;&lt;br /&gt;&lt;pre class="c++" name="code"&gt;#include &amp;lt;pcl/io/openni_grabber.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/visualization/cloud_viewer.h&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;class SimpleOpenNIViewer&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; &amp;nbsp;public:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;SimpleOpenNIViewer () : viewer ("PCL OpenNI Viewer") {}&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;void cloud_cb_ (const pcl::PointCloud&amp;lt;pcl::PointXYZRGB&amp;gt;::ConstPtr &amp;amp;cloud)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;if (!viewer.wasStopped())&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;viewer.showCloud (cloud);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;void run ()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;pcl::Grabber* interface = new pcl::OpenNIGrabber();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;boost::function&amp;lt;void (const pcl::PointCloud&amp;lt;pcl::PointXYZRGB&amp;gt;::ConstPtr&amp;amp;)&amp;gt; f =&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;boost::bind (&amp;amp;SimpleOpenNIViewer::cloud_cb_, this, _1);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;interface-&amp;gt;registerCallback (f);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;interface-&amp;gt;start ();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;while (!viewer.wasStopped())&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;sleep (1);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;interface-&amp;gt;stop ();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;pcl::visualization::CloudViewer viewer;&lt;br /&gt;&amp;nbsp;};&lt;br /&gt;&lt;br /&gt;&amp;nbsp;int main ()&lt;br /&gt;&amp;nbsp;{&lt;br /&gt;&amp;nbsp; &amp;nbsp;SimpleOpenNIViewer v;&lt;br /&gt;&amp;nbsp; &amp;nbsp;v.run ();&lt;br /&gt;&amp;nbsp; &amp;nbsp;return 0;&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;ビューワで表示されます。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/4c1e21df38de5d2485aaa3ee5b603d30.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://gyazo.com/4c1e21df38de5d2485aaa3ee5b603d30.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/a26bcecf4388658fc0f3ded920ff8db3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="200" src="http://gyazo.com/a26bcecf4388658fc0f3ded920ff8db3.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;さらに&lt;br /&gt;#include&amp;lt;pcl/io/pcd_io.h&amp;gt;&lt;br /&gt;して、cloud_cb_の中に&lt;br /&gt;pcl::io::savePCDFileBinary("kinect.pcd", *cloud);&lt;br /&gt;を追加すればファイルに保存もできますね。&lt;br /&gt;マイフレーム保存してもけっこう軽いです。&lt;br /&gt;&lt;br /&gt;次回は平面抽出をやります。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-7071030526375518312?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/7071030526375518312/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/08/point-cloud-librarykinect.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/7071030526375518312'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/7071030526375518312'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/08/point-cloud-librarykinect.html' title='Point Cloud Libraryを試す（その３：Kinectからデータ取得）'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-2475539682960135702</id><published>2011-08-21T22:35:00.000+09:00</published><updated>2011-08-21T22:35:30.673+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pcl'/><title type='text'>Point Cloud Libraryを試す（その２：ビューワ編）</title><content type='html'>前回ファイルの書き込みをしました。&lt;br /&gt;今回は読み込みを飛ばして可視化をします。&lt;br /&gt;可視化できないと何をやっているのかさっぱりなので。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://pointclouds.org/documentation/tutorials/cloud_viewer.php#cloud-viewer"&gt;http://pointclouds.org/documentation/tutorials/cloud_viewer.php#cloud-viewer&lt;/a&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;前回のコードを少し書き換えて、ビューワのコードをいれてみました。&lt;br /&gt;&lt;br /&gt;&lt;pre class="c++" name="code"&gt;#include &amp;lt;iostream&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/io/pcd_io.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/point_types.h&amp;gt;&lt;br /&gt;#include &amp;lt;pcl/visualization/cloud_viewer.h&amp;gt; // 追加&lt;br /&gt;&lt;br /&gt;int&lt;br /&gt;  main (int argc, char** argv)&lt;br /&gt;{&lt;br /&gt;  pcl::PointCloud&amp;lt;pcl::PointXYZ&amp;gt; cloud;&lt;br /&gt;  &lt;br /&gt;  // Fill in the cloud data&lt;br /&gt;  cloud.width    = 5;&lt;br /&gt;  cloud.height   = 1;&lt;br /&gt;  cloud.is_dense = false;&lt;br /&gt;  cloud.points.resize (cloud.width * cloud.height);&lt;br /&gt;&lt;br /&gt;  for (size_t i = 0; i &amp;lt; cloud.points.size (); ++i)&lt;br /&gt;  {&lt;br /&gt;    cloud.points[i].x = 1024 * rand () / (RAND_MAX + 1.0);&lt;br /&gt;    cloud.points[i].y = 1024 * rand () / (RAND_MAX + 1.0);&lt;br /&gt;    cloud.points[i].z = 1024 * rand () / (RAND_MAX + 1.0);&lt;br /&gt;  }&lt;br /&gt;  // 追加&lt;br /&gt;  pcl::visualization::CloudViewer viewer ("Simple Cloud Viewer");&lt;br /&gt;  viewer.showCloud (cloud.makeShared());&lt;br /&gt;  while (!viewer.wasStopped ()) {&lt;br /&gt;  }&lt;br /&gt;&lt;br /&gt;  return (0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;CMakeLists.txtは以下のような感じ。&lt;br /&gt;&lt;br /&gt;&lt;pre class="cmake" name="code"&gt;cmake_minimum_required(VERSION 2.8 FATAL_ERROR)&lt;br /&gt;&lt;br /&gt;project(pcd_write)&lt;br /&gt;&lt;br /&gt;find_package(PCL 1.1 REQUIRED)&lt;br /&gt;&lt;br /&gt;include_directories(${PCL_INCLUDE_DIRS})&lt;br /&gt;link_directories(${PCL_LIBRARY_DIRS})&lt;br /&gt;add_definitions(${PCL_DEFINITIONS})&lt;br /&gt;&lt;br /&gt;add_executable (pcd_write pcd_write.cpp)&lt;br /&gt;add_executable (pcl_view_test pcl_view_test.cpp)&lt;br /&gt;&lt;br /&gt;target_link_libraries (pcd_write ${PCL_COMMON_LIBRARIES} ${PCL_IO_LIBRARIES})&lt;br /&gt;target_link_libraries (pcl_view_test ${PCL_LIBRARIES})&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;$ ./pcl_view_test&lt;br /&gt;とすると以下のようなビューワが立ち上がります。&lt;br /&gt;マウスを駆使してうまく表示します。ホイールで縮小するとよさそうです。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/8ce2e608965e8da7891e001b75f76ef2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="250" src="http://gyazo.com/8ce2e608965e8da7891e001b75f76ef2.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div&gt;見えないでしょうがちっちゃい５つの白い点が作成したポイントクラウドです。&lt;br /&gt;&lt;br /&gt;ためしに点を１００ｘ１００くらいにしてみます。widthとheightを100にしてみます。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/f6ce63fdab62d95070c00190d2eb8512.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="250" src="http://gyazo.com/f6ce63fdab62d95070c00190d2eb8512.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;おー、ポイントクラウドって感じですね。&lt;br /&gt;&lt;br /&gt;公式のチュートリアルはこちらです。&lt;br /&gt;もう少し詳しいので必要になったら参照したいと思います。&lt;br /&gt;&lt;a href="http://pointclouds.org/documentation/tutorials/cloud_viewer.php#cloud-viewer"&gt;http://pointclouds.org/documentation/tutorials/cloud_viewer.php#cloud-viewer&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-2475539682960135702?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/2475539682960135702/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/08/point-cloud-library_21.html#comment-form' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/2475539682960135702'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/2475539682960135702'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/08/point-cloud-library_21.html' title='Point Cloud Libraryを試す（その２：ビューワ編）'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-1678994143180925059</id><published>2011-08-20T21:31:00.000+09:00</published><updated>2011-08-20T21:31:45.063+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pcl'/><title type='text'>Point Cloud Libraryを試す（その１：インストール＆コンパイルテスト編）</title><content type='html'>ROSを使わない前提でのインストールを説明します。&lt;br /&gt;&lt;br /&gt;（ROSでのPCLのインストールは簡単です。&lt;br /&gt;$ sudo apt-get install ros-diamondback-point-cloud-perception&lt;br /&gt;だけ。ROSでは/usr/とかにインストールしないので、以下のインストール方法と競合はしません。）&lt;br /&gt;&lt;br /&gt;相変わらず環境はUbuntu 10.04です。&lt;br /&gt;&lt;a href="http://pointclouds.org/downloads/linux.html"&gt;http://pointclouds.org/downloads/linux.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: rgba(255, 255, 255, 0.949219);"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="background-color: #f8f8f8; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 0.95em; letter-spacing: 0.015em; line-height: 15px; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em; white-space: pre-wrap; word-wrap: break-word;"&gt;sudo add-apt-repository ppa:v-launchpad-jochen-sprickerhof-de/pcl&lt;br /&gt;sudo apt-get update&lt;br /&gt;sudo apt-get install libpcl-1.1-dev&lt;br /&gt;&lt;/pre&gt;&lt;div style="font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif; font-size: 14px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif; font-size: 14px;"&gt;以上でおしまいです。&lt;/div&gt;&lt;div style="font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif; font-size: 14px;"&gt;簡単ですね。&lt;/div&gt;&lt;div style="font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif; font-size: 14px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif; font-size: 14px;"&gt;ではまずこれをやります。&lt;/div&gt;&lt;div style="font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif; font-size: 14px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif; font-size: 14px;"&gt;Writing Point Cloud data to PCD files (ポイントクラウドデータをPCDファイルに書きこむ）&lt;/div&gt;&lt;div style="font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif; font-size: 14px;"&gt;&lt;a href="http://pointclouds.org/documentation/tutorials/writing_pcd.php#writing-pcd"&gt;http://pointclouds.org/documentation/tutorials/writing_pcd.php#writing-pcd&lt;/a&gt;&lt;/div&gt;&lt;div style="font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif; font-size: 14px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif; font-size: 14px;"&gt;まず以下の内容をpcd_write.cppというファイル名で保存します。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: #eeffcc;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="background-color: #f8f8f8; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 0.95em; letter-spacing: 0.015em; line-height: 15px; overflow-x: auto; overflow-y: hidden; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em; white-space: pre; word-wrap: normal;"&gt;&lt;span class="cp" style="color: #007020;"&gt;#include &amp;lt;iostream&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="cp" style="color: #007020;"&gt;#include &amp;lt;pcl/io/pcd_io.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="cp" style="color: #007020;"&gt;#include &amp;lt;pcl/point_types.h&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="kt" style="color: #902000;"&gt;int&lt;/span&gt;&lt;br /&gt;  &lt;span class="n"&gt;main&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kt" style="color: #902000;"&gt;int&lt;/span&gt; &lt;span class="n"&gt;argc&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="kt" style="color: #902000;"&gt;char&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;**&lt;/span&gt; &lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class="n"&gt;pcl&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;::&lt;/span&gt;&lt;span class="n"&gt;PointCloud&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;&amp;lt;&lt;/span&gt;&lt;span class="n"&gt;pcl&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;::&lt;/span&gt;&lt;span class="n"&gt;PointXYZ&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;cloud&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class="c1" style="color: #408090; font-style: italic;"&gt;// Fill in the cloud data&lt;/span&gt;&lt;br /&gt;  &lt;span class="n"&gt;cloud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt;    &lt;span class="o" style="color: #666666;"&gt;=&lt;/span&gt; &lt;span class="mi" style="color: #208050;"&gt;5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class="n"&gt;cloud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;   &lt;span class="o" style="color: #666666;"&gt;=&lt;/span&gt; &lt;span class="mi" style="color: #208050;"&gt;1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class="n"&gt;cloud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;is_dense&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;=&lt;/span&gt; &lt;span class="kc" style="color: #007020; font-weight: bold;"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class="n"&gt;cloud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;points&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;resize&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cloud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;width&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;*&lt;/span&gt; &lt;span class="n"&gt;cloud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;height&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class="k" style="color: #007020; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;=&lt;/span&gt; &lt;span class="mi" style="color: #208050;"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;cloud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;points&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;++&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;  &lt;span class="p"&gt;{&lt;/span&gt;&lt;br /&gt;    &lt;span class="n"&gt;cloud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;points&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;=&lt;/span&gt; &lt;span class="mi" style="color: #208050;"&gt;1024&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;*&lt;/span&gt; &lt;span class="n"&gt;rand&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RAND_MAX&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;+&lt;/span&gt; &lt;span class="mf" style="color: #208050;"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br /&gt;    &lt;span class="n"&gt;cloud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;points&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;=&lt;/span&gt; &lt;span class="mi" style="color: #208050;"&gt;1024&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;*&lt;/span&gt; &lt;span class="n"&gt;rand&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RAND_MAX&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;+&lt;/span&gt; &lt;span class="mf" style="color: #208050;"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br /&gt;    &lt;span class="n"&gt;cloud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;points&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;z&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;=&lt;/span&gt; &lt;span class="mi" style="color: #208050;"&gt;1024&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;*&lt;/span&gt; &lt;span class="n"&gt;rand&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;/&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;RAND_MAX&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;+&lt;/span&gt; &lt;span class="mf" style="color: #208050;"&gt;1.0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span class="p"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class="n"&gt;pcl&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;::&lt;/span&gt;&lt;span class="n"&gt;io&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;::&lt;/span&gt;&lt;span class="n"&gt;savePCDFileASCII&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s" style="color: #4070a0;"&gt;"test_pcd.pcd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;cloud&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br /&gt;  &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;::&lt;/span&gt;&lt;span class="n"&gt;cerr&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s" style="color: #4070a0;"&gt;"Saved "&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;cloud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;points&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s" style="color: #4070a0;"&gt;" data points to test_pcd.pcd."&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;::&lt;/span&gt;&lt;span class="n"&gt;endl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class="k" style="color: #007020; font-weight: bold;"&gt;for&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;size_t&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;=&lt;/span&gt; &lt;span class="mi" style="color: #208050;"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;cloud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;points&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;size&lt;/span&gt; &lt;span class="p"&gt;();&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;++&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;    &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;::&lt;/span&gt;&lt;span class="n"&gt;cerr&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s" style="color: #4070a0;"&gt;"    "&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;cloud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;points&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s" style="color: #4070a0;"&gt;" "&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;cloud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;points&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="s" style="color: #4070a0;"&gt;" "&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;cloud&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;points&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;z&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class="n"&gt;std&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;::&lt;/span&gt;&lt;span class="n"&gt;endl&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;  &lt;span class="k" style="color: #007020; font-weight: bold;"&gt;return&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi" style="color: #208050;"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif; font-size: 14px;"&gt;&lt;span class="Apple-style-span" style="background-color: rgba(255, 255, 255, 0.949219);"&gt;で、次のようなCMakeLists.txtを作成します。&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif; font-size: 14px;"&gt;&lt;span class="Apple-style-span" style="background-color: rgba(255, 255, 255, 0.949219);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="background-color: rgba(255, 255, 255, 0.949219); font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif; font-size: 14px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="highlight-cmake"&gt;&lt;table class="highlighttable" style="border-collapse: collapse; margin-bottom: 0px; margin-left: 0.5em; margin-right: -0.5em; margin-top: 0px;"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td class="code" style="padding-bottom: 0px; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0px;"&gt;&lt;div class="highlight" style="background-attachment: initial; background-clip: initial; background-color: #eeffcc; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"&gt;&lt;pre style="background-color: #f8f8f8; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 0.95em; letter-spacing: 0.015em; line-height: 15px; overflow-x: auto; overflow-y: hidden; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em; white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="nb" style="color: #007020;"&gt;cmake_minimum_required&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s" style="color: #4070a0;"&gt;VERSION&lt;/span&gt; &lt;span class="s" style="color: #4070a0;"&gt;2.8&lt;/span&gt; &lt;span class="s" style="color: #4070a0;"&gt;FATAL_ERROR&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;project&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s" style="color: #4070a0;"&gt;pcd_write&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;find_package&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s" style="color: #4070a0;"&gt;PCL&lt;/span&gt; &lt;span class="s" style="color: #4070a0;"&gt;1.1&lt;/span&gt; &lt;span class="s" style="color: #4070a0;"&gt;REQUIRED&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;include_directories&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;${&lt;/span&gt;&lt;span class="nv" style="color: #bb60d5;"&gt;PCL_INCLUDE_DIRS&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;link_directories&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;${&lt;/span&gt;&lt;span class="nv" style="color: #bb60d5;"&gt;PCL_LIBRARY_DIRS&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;add_definitions&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;${&lt;/span&gt;&lt;span class="nv" style="color: #bb60d5;"&gt;PCL_DEFINITIONS&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;add_executable&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s" style="color: #4070a0;"&gt;pcd_write&lt;/span&gt; &lt;span class="s" style="color: #4070a0;"&gt;pcd_write.cpp&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span class="nb" style="color: #007020;"&gt;target_link_libraries&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s" style="color: #4070a0;"&gt;pcd_write&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;${&lt;/span&gt;&lt;span class="nv" style="color: #bb60d5;"&gt;PCL_COMMON_LIBRARIES&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;}&lt;/span&gt; &lt;span class="o" style="color: #666666;"&gt;${&lt;/span&gt;&lt;span class="nv" style="color: #bb60d5;"&gt;PCL_IO_LIBRARIES&lt;/span&gt;&lt;span class="o" style="color: #666666;"&gt;}&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$ cmake .&lt;br /&gt;$ make&lt;/blockquote&gt;とするとpcd_writeという実行ファイルができるはずです。&lt;br /&gt;&lt;blockquote&gt;$ ./pcd_write&lt;/blockquote&gt;して、以下のように表示されればOK&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$ ./pcd_write&lt;br /&gt;Saved 5 data points to test_pcd.pcd.&lt;br /&gt;&amp;nbsp; &amp;nbsp; 0.352222 -0.151883 -0.106395&lt;br /&gt;&amp;nbsp; &amp;nbsp; -0.397406 -0.473106 0.292602&lt;br /&gt;&amp;nbsp; &amp;nbsp; -0.731898 0.667105 0.441304&lt;br /&gt;&amp;nbsp; &amp;nbsp; -0.734766 0.854581 -0.0361733&lt;br /&gt;&amp;nbsp; &amp;nbsp; -0.4607 -0.277468 -0.916762&lt;/blockquote&gt;&lt;br /&gt;test_pcd.pcdというファイルができているはずです。&lt;br /&gt;中身は&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;# .PCD v.7 - Point Cloud Data file format&lt;br /&gt;VERSION .7&lt;br /&gt;FIELDS x y z&lt;br /&gt;SIZE 4 4 4&lt;br /&gt;TYPE F F F&lt;br /&gt;COUNT 1 1 1&lt;br /&gt;WIDTH 5&lt;br /&gt;HEIGHT 1&lt;br /&gt;VIEWPOINT 0 0 0 1 0 0 0&lt;br /&gt;POINTS 5&lt;br /&gt;DATA ascii&lt;br /&gt;0.35222197 -0.15188313 -0.10639524&lt;br /&gt;-0.3974061 -0.47310591 0.29260206&lt;br /&gt;-0.73189831 0.66710472 0.44130373&lt;br /&gt;-0.73476553 0.85458088 -0.036173344&lt;br /&gt;-0.46070004 -0.2774682 -0.91676188&lt;/blockquote&gt;&lt;div&gt;のようになっています。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;pcl::PointXYZの定義は&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: rgba(255, 255, 255, 0.949219); font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif; font-size: 14px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="highlight-cpp"&gt;&lt;div class="highlight" style="background-attachment: initial; background-clip: initial; background-color: #eeffcc; background-image: initial; background-origin: initial; background-position: initial initial; background-repeat: initial initial;"&gt;&lt;pre style="background-color: #f8f8f8; border-bottom-color: rgb(204, 204, 204); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(204, 204, 204); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(204, 204, 204); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(204, 204, 204); border-top-style: solid; border-top-width: 1px; font-family: Consolas, 'Deja Vu Sans Mono', 'Bitstream Vera Sans Mono', monospace; font-size: 0.95em; letter-spacing: 0.015em; line-height: 15px; overflow-x: auto; overflow-y: hidden; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em; white-space: pre; word-wrap: normal;"&gt;&lt;span class="c1" style="color: #408090; font-style: italic;"&gt;// \brief A point structure representing Euclidean xyz coordinates.&lt;/span&gt;&lt;br /&gt;&lt;span class="k" style="color: #007020; font-weight: bold;"&gt;struct&lt;/span&gt; &lt;span class="n"&gt;PointXYZ&lt;/span&gt;&lt;br /&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;br /&gt;  &lt;span class="kt" style="color: #902000;"&gt;float&lt;/span&gt; &lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kt" style="color: #902000;"&gt;float&lt;/span&gt; &lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br /&gt;  &lt;span class="kt" style="color: #902000;"&gt;float&lt;/span&gt; &lt;span class="n"&gt;z&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span class="p"&gt;};&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;となっています。&lt;br /&gt;たんなる３次元座標ですね。この他にも色情報を含んだPointXYZRGBなど、さまざまなタイプがpcl/point_types.hに定義されています。&lt;br /&gt;&lt;br /&gt;pcl::PointCloudクラスはwidthやheightを持ちます。これは画像のアナロジーになっているみたいです。&lt;br /&gt;Kinectでは距離画像（画素が距離情報の画像）を取れるので親和性が高いのでしょう。&lt;br /&gt;&lt;br /&gt;is_denseはTrueの場合にNaNやInfが値として入っていないことを保証するようです。&lt;br /&gt;&lt;br /&gt;あとstd_msgs::Header型のheaderという変数も持ちます。これはROSのものと同じ型です。&lt;br /&gt;ROSに依存していないのになぜこれが使えるかというと、&lt;br /&gt;/usr/include/pcl-1.1/の下にstd_msgsとsensor_msgsがインストールされているからです。&lt;br /&gt;非常に気持ち悪いですね。&lt;br /&gt;&lt;br /&gt;あとは&lt;br /&gt;pcl::io::savePCDFileASCII関数でファイルに出力しています。非常に簡単ですね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-1678994143180925059?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/1678994143180925059/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/08/point-cloud-library_20.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/1678994143180925059'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/1678994143180925059'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/08/point-cloud-library_20.html' title='Point Cloud Libraryを試す（その１：インストール＆コンパイルテスト編）'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-1300213590850249348</id><published>2011-08-19T12:58:00.000+09:00</published><updated>2011-08-19T12:58:06.287+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pcl'/><category scheme='http://www.blogger.com/atom/ns#' term='雑談'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>Point Cloud Libraryを試す（その０）</title><content type='html'>かなり遅くなりましたが今後このブログで&lt;a href="http://www.pointclouds.org/about.html"&gt;Point Cloud Library (PCL)&lt;/a&gt;を試したいと思います。&lt;br /&gt;&lt;br /&gt;PCLはKinectやレーザーレンジファインダで獲得できる３次元の点群を使った認識を行うためのライブラリです。（たぶん）&lt;br /&gt;（including&amp;nbsp;&lt;span class="Apple-style-span" style="background-color: rgba(255, 255, 255, 0.949219); font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif; font-size: 14px; line-height: 20px;"&gt;filtering, feature estimation, surface reconstruction, registration, model fitting and segmentation）とあります。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: rgba(255, 255, 255, 0.949219); font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif; font-size: 14px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 14px; line-height: 20px;"&gt;HPを見るとスポンサーとして、intel, nvidia, willowなどが並び、日本でも産総研、東大、トヨタが付いているようですね。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="background-color: rgba(255, 255, 255, 0.949219); font-family: 'Droid Sans', 'DejaVu Sans', Arial, sans-serif; font-size: 14px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;私はPCLは&lt;a href="http://ros-robot.blogspot.com/2010/12/pclunstable.html"&gt;かなり前から注目&lt;/a&gt;していましたが、正直何に使っていいか分かりませんでした。&lt;br /&gt;Kinectが発売され、誰でも使えるようになり、さらに注目度が増していたわけですが、&lt;br /&gt;やはりどうロボットにいれていいかわからず手がでませんでした。&lt;br /&gt;６軸以上のアームがあれば物体認識に使えるんでしょうけど、&lt;br /&gt;そんなもの持っていませんし、作るにもお金とスキルと時間が必要です。&lt;br /&gt;&lt;br /&gt;また、なんとか私が持っているロボット（移動台車、Kinect、２軸アーム）での利用法をさがそうとしていましたが、&lt;br /&gt;やはり思いつきませんでした。&lt;br /&gt;（１つ考えていますが、あまり面白くないです。誰かネタがあったら教えてください。）&lt;br /&gt;&lt;br /&gt;でも勉強していくうちに思いつくかもしれない、と思って見切り発車でやっていこうと思います。&lt;br /&gt;&lt;br /&gt;PCLはROS依存とROS依存じゃないところをちゃんと意識して作っているっぽいので、ROSじ&lt;br /&gt;ゃない方面からやるか、ROSでやるか、という２つのやり方があると思います。&lt;br /&gt;ドキュメントの再利用性を考えて、ROS非依存で進めて、最後にROSからだとこうなる、という感じで進めようかと思います。&lt;br /&gt;最後にルンバにKinectを載せてなんかやるでしょう。&lt;br /&gt;&lt;br /&gt;ではでは。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-1300213590850249348?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/1300213590850249348/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/08/point-cloud-library.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/1300213590850249348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/1300213590850249348'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/08/point-cloud-library.html' title='Point Cloud Libraryを試す（その０）'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-4933180427263849231</id><published>2011-08-16T23:08:00.003+09:00</published><updated>2011-08-16T23:17:26.815+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenRTM-aist'/><title type='text'>OpenRTM-asit ROSパッチ(ros port)を使ってルンバを操縦する</title><content type='html'>&lt;a href="http://ros-robot.blogspot.com/2011/08/openrtm-asit-ros.html"&gt;前回OpenRTM-aistからROSを使えるようにしました。&lt;/a&gt;&lt;br /&gt;次はお決まりですがルンバを動かします。&lt;br /&gt;&lt;br /&gt;今回はOpenRTM-aistの仮想ジョイスティックコンポーネントを利用してルンバを動かします。&lt;br /&gt;&lt;br /&gt;構成としては&lt;br /&gt;&lt;br /&gt;TkJoyStick(RTC) -&amp;gt; JoyRTM2velROS(今回作ったコンポーネント)(RTC/ROS) -&amp;gt; いつもの自作ルンバノード（ROS)&lt;br /&gt;&lt;br /&gt;という感じです。&lt;br /&gt;TkJoyStickはOpenRTM-aistのサンプルに入っていて、ジョイスティックっぽいGUIです。&lt;br /&gt;&lt;br /&gt;面倒なのでビデオ解説です。&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="349" src="http://www.youtube.com/embed/r_6ofHjgySg" width="425"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;JoyRTM2velROSのソースはTkJoyStickからの入力(TimedFloatSeq)をROSのgeometry_msgs/Twist型に変換しているだけです。&lt;br /&gt;やはりOpenRTMとROSは非常に似ていますね。&lt;br /&gt;&lt;br /&gt;OpenRTM-aistのコードの自動生成は便利だけど修正がめんどくさいです。&lt;br /&gt;とくにRosPortのように標準ツールでサポートされていないと大変です。&lt;br /&gt;なにかいい方法があれば教えてください。&lt;br /&gt;&lt;br /&gt;参考程度にcppのソースファイルだけ貼りつけておきます。&lt;br /&gt;いつも通り適当です。&lt;br /&gt;&lt;br /&gt;一応リポジトリに&lt;br /&gt;otl-ros-pkg/otl_nav/JoyRTM2velROS&lt;br /&gt;としておいておきました。&lt;br /&gt;&lt;br /&gt;【参考サイト】&lt;br /&gt;&lt;a href="http://code.google.com/p/rtm-ros-robotics/wiki/rosport_Example"&gt;http://code.google.com/p/rtm-ros-robotics/wiki/rosport_Example&lt;/a&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/rtm-ros-robotics/wiki/RTM_HelloWorldSample"&gt;http://code.google.com/p/rtm-ros-robotics/wiki/RTM_HelloWorldSample&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #323232; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: x-small;"&gt;&lt;span class="Apple-style-span" style="line-height: 18px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;ヘッダファイル&lt;br /&gt;&lt;br /&gt;&lt;pre class="c++" name="code"&gt;// -*- C++ -*-&lt;br /&gt;/*!&lt;br /&gt; * @file  JoyRTM2velROS.h&lt;br /&gt; * @brief convert Joystick sample port to ROS twist msg&lt;br /&gt; * @date  $Date$&lt;br /&gt; *&lt;br /&gt; * $Id$&lt;br /&gt; */&lt;br /&gt;&lt;br /&gt;#ifndef JOYRTM2VELROS_H&lt;br /&gt;#define JOYRTM2VELROS_H&lt;br /&gt;&lt;br /&gt;#include &amp;lt;rtm/Manager.h&amp;gt;&lt;br /&gt;#include &amp;lt;rtm/DataFlowComponentBase.h&amp;gt;&lt;br /&gt;#include &amp;lt;rtm/CorbaPort.h&amp;gt;&lt;br /&gt;#include &amp;lt;rtm/DataInPort.h&amp;gt;&lt;br /&gt;#include &amp;lt;rtm/DataOutPort.h&amp;gt;&lt;br /&gt;#include &amp;lt;rtm/idl/BasicDataTypeSkel.h&amp;gt;&lt;br /&gt;#include &amp;lt;rtm/idl/ExtendedDataTypesSkel.h&amp;gt;&lt;br /&gt;#include &amp;lt;rtm/idl/InterfaceDataTypesSkel.h&amp;gt;&lt;br /&gt;#include &amp;lt;rtm/RosOutPort.h&amp;gt;&lt;br /&gt;#include "geometry_msgs/Twist.h"&lt;br /&gt;&lt;br /&gt;using namespace RTC;&lt;br /&gt;&lt;br /&gt;/*!&lt;br /&gt; * @class JoyRTM2velROS&lt;br /&gt; * @brief convert Joystick sample port to ROS twist msg&lt;br /&gt; *&lt;br /&gt; */&lt;br /&gt;class JoyRTM2velROS&lt;br /&gt;  : public RTC::DataFlowComponentBase&lt;br /&gt;{&lt;br /&gt; public:&lt;br /&gt;  /*!&lt;br /&gt;   * @brief constructor&lt;br /&gt;   * @param manager Maneger Object&lt;br /&gt;   */&lt;br /&gt;  JoyRTM2velROS(RTC::Manager* manager);&lt;br /&gt;&lt;br /&gt;  /*!&lt;br /&gt;   * @brief destructor&lt;br /&gt;   */&lt;br /&gt;  ~JoyRTM2velROS();&lt;br /&gt;&lt;br /&gt;  /***&lt;br /&gt;   *&lt;br /&gt;   * The initialize action (on CREATED-&amp;gt;ALIVE transition)&lt;br /&gt;   * formaer rtc_init_entry() &lt;br /&gt;   *&lt;br /&gt;   * @return RTC::ReturnCode_t&lt;br /&gt;   * &lt;br /&gt;   * &lt;br /&gt;   */&lt;br /&gt;   virtual RTC::ReturnCode_t onInitialize();&lt;br /&gt;&lt;br /&gt;  /***&lt;br /&gt;   *&lt;br /&gt;   * The execution action that is invoked periodically&lt;br /&gt;   * former rtc_active_do()&lt;br /&gt;   *&lt;br /&gt;   * @param ec_id target ExecutionContext Id&lt;br /&gt;   *&lt;br /&gt;   * @return RTC::ReturnCode_t&lt;br /&gt;   * &lt;br /&gt;   * &lt;br /&gt;   */&lt;br /&gt;   virtual RTC::ReturnCode_t onExecute(RTC::UniqueId ec_id);&lt;br /&gt;&lt;br /&gt; protected:&lt;br /&gt;&lt;br /&gt;  // Configuration variable declaration&lt;br /&gt;  // &lt;rtc-template block="config_declare"&gt;&lt;br /&gt;  /*!&lt;br /&gt;   * &lt;br /&gt;   * - Name:  max_linear_velocity&lt;br /&gt;   * - DefaultValue: 0.1&lt;br /&gt;   */&lt;br /&gt;  double m_max_linear_velocity;&lt;br /&gt;  /*!&lt;br /&gt;   * &lt;br /&gt;   * - Name:  max_angular_velocity&lt;br /&gt;   * - DefaultValue: 0.2&lt;br /&gt;   */&lt;br /&gt;  double m_max_angular_velocity;&lt;br /&gt;  // &lt;/rtc-template&gt;&lt;br /&gt;&lt;br /&gt;  // DataInPort declaration&lt;br /&gt;  // &lt;rtc-template block="inport_declare"&gt;&lt;br /&gt;  TimedFloatSeq m_joyInput;&lt;br /&gt;  /*!&lt;br /&gt;   */&lt;br /&gt;  InPort&lt;timedfloatseq&gt; m_joyInputIn;&lt;br /&gt;  &lt;br /&gt;  // ROS Port&lt;br /&gt;  geometry_msgs::Twist m_rosVel;&lt;br /&gt;  RosOutPort&lt;geometry_msgs::twist&gt; m_rosVelOut;&lt;br /&gt;&lt;br /&gt; private:&lt;br /&gt;&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;extern "C"&lt;br /&gt;{&lt;br /&gt;  DLL_EXPORT void JoyRTM2velROSInit(RTC::Manager* manager);&lt;br /&gt;};&lt;br /&gt;&lt;br /&gt;#endif // JOYRTM2VELROS_H&lt;br /&gt;&lt;/geometry_msgs::twist&gt;&lt;/timedfloatseq&gt;&lt;/rtc-template&gt;&lt;/pre&gt;&lt;br /&gt;実体(.cpp)&lt;br /&gt;&lt;br /&gt;&lt;pre class="c++" name="code"&gt;// -*- C++ -*-&lt;br /&gt;/*!&lt;br /&gt;&amp;nbsp;* @file &amp;nbsp;JoyRTM2velROS.cpp&lt;br /&gt;&amp;nbsp;* @brief convert Joystick sample port to ROS twist msg&lt;br /&gt;&amp;nbsp;* @date $Date$&lt;br /&gt;&amp;nbsp;*&lt;br /&gt;&amp;nbsp;* $Id$&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;&lt;br /&gt;#include "JoyRTM2velROS.h"&lt;br /&gt;&lt;br /&gt;// Module specification&lt;br /&gt;// &amp;lt;rtc-template block="module_spec"&amp;gt;&lt;br /&gt;static const char* joyrtm2velros_spec[] =&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; "implementation_id", "JoyRTM2velROS",&lt;br /&gt;&amp;nbsp; &amp;nbsp; "type_name", &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "JoyRTM2velROS",&lt;br /&gt;&amp;nbsp; &amp;nbsp; "description", &amp;nbsp; &amp;nbsp; &amp;nbsp; "convert Joystick sample port to ROS twist msg",&lt;br /&gt;&amp;nbsp; &amp;nbsp; "version", &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "1.0.0",&lt;br /&gt;&amp;nbsp; &amp;nbsp; "vendor", &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;"OTL",&lt;br /&gt;&amp;nbsp; &amp;nbsp; "category", &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;"Sample",&lt;br /&gt;&amp;nbsp; &amp;nbsp; "activity_type", &amp;nbsp; &amp;nbsp; "PERIODIC",&lt;br /&gt;&amp;nbsp; &amp;nbsp; "kind", &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;"DataFlowComponent",&lt;br /&gt;&amp;nbsp; &amp;nbsp; "max_instance", &amp;nbsp; &amp;nbsp; &amp;nbsp;"1",&lt;br /&gt;&amp;nbsp; &amp;nbsp; "language", &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;"C++",&lt;br /&gt;&amp;nbsp; &amp;nbsp; "lang_type", &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; "compile",&lt;br /&gt;&amp;nbsp; &amp;nbsp; // Configuration variables&lt;br /&gt;&amp;nbsp; &amp;nbsp; "conf.default.max_linear_velocity", "0.2",&lt;br /&gt;&amp;nbsp; &amp;nbsp; "conf.default.max_angular_velocity", "0.4",&lt;br /&gt;&amp;nbsp; &amp;nbsp; // Widget&lt;br /&gt;&amp;nbsp; &amp;nbsp; "conf.__widget__.max_linear_velocity", "slider",&lt;br /&gt;&amp;nbsp; &amp;nbsp; "conf.__widget__.max_angular_velocity", "slider",&lt;br /&gt;&amp;nbsp; &amp;nbsp; // Constraints&lt;br /&gt;&amp;nbsp; &amp;nbsp; ""&lt;br /&gt;&amp;nbsp; };&lt;br /&gt;// &amp;lt;/rtc-template&amp;gt;&lt;br /&gt;&lt;br /&gt;/*!&lt;br /&gt;&amp;nbsp;* @brief constructor&lt;br /&gt;&amp;nbsp;* @param manager Maneger Object&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;JoyRTM2velROS::JoyRTM2velROS(RTC::Manager* manager)&lt;br /&gt;&amp;nbsp; &amp;nbsp; // &amp;lt;rtc-template block="initializer"&amp;gt;&lt;br /&gt;&amp;nbsp; : RTC::DataFlowComponentBase(manager),&lt;br /&gt;&amp;nbsp; &amp;nbsp; m_joyInputIn("joy_input", m_joyInput)&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; // &amp;lt;/rtc-template&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; ,&lt;br /&gt;&amp;nbsp; &amp;nbsp; m_rosVelOut("cmd_vel", "rtm2ros", m_rosVel)&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/*!&lt;br /&gt;&amp;nbsp;* @brief destructor&lt;br /&gt;&amp;nbsp;*/&lt;br /&gt;JoyRTM2velROS::~JoyRTM2velROS()&lt;br /&gt;{&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;RTC::ReturnCode_t JoyRTM2velROS::onInitialize()&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; // Registration: InPort/OutPort/Service&lt;br /&gt;&amp;nbsp; // &amp;lt;rtc-template block="registration"&amp;gt;&lt;br /&gt;&amp;nbsp; // Set InPort buffers&lt;br /&gt;&amp;nbsp; addInPort("joy_input", m_joyInputIn);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // Set OutPort buffer&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // Set service provider to Ports&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // Set service consumers to Ports&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // Set CORBA Service Ports&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // &amp;lt;/rtc-template&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; // &amp;lt;rtc-template block="bind_config"&amp;gt;&lt;br /&gt;&amp;nbsp; // Bind variables and configuration variable&lt;br /&gt;&amp;nbsp; bindParameter("max_linear_velocity", m_max_linear_velocity, "0.2");&lt;br /&gt;&amp;nbsp; bindParameter("max_angular_velocity", m_max_angular_velocity, "0.4");&lt;br /&gt;&amp;nbsp; // &amp;lt;/rtc-template&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; addRosOutPort("ros_velocity", m_rosVelOut);&lt;br /&gt;&lt;br /&gt;&amp;nbsp; return RTC::RTC_OK;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;RTC::ReturnCode_t JoyRTM2velROS::onExecute(RTC::UniqueId ec_id)&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; if(m_joyInputIn.isNew()) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; m_joyInputIn.read();&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; m_rosVel.linear.x = m_joyInput.data[1] * 0.005;&lt;br /&gt;&amp;nbsp; &amp;nbsp; m_rosVel.angular.z = -m_joyInput.data[0] * 0.010;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; if ( m_max_linear_velocity &amp;lt; m_rosVel.linear.x) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; m_rosVel.linear.x = m_max_linear_velocity;&lt;br /&gt;&amp;nbsp; &amp;nbsp; } else if (-m_max_linear_velocity &amp;gt; m_rosVel.linear.x) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; m_rosVel.linear.x = -m_max_linear_velocity;&lt;br /&gt;&amp;nbsp; &amp;nbsp; } else if (fabs(m_rosVel.linear.x) &amp;lt; 0.01) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; m_rosVel.linear.x = 0.0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; if ( m_max_angular_velocity &amp;lt; m_rosVel.angular.z) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; m_rosVel.angular.z = m_max_angular_velocity;&lt;br /&gt;&amp;nbsp; &amp;nbsp; } else if (-m_max_angular_velocity &amp;gt; m_rosVel.angular.z) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; m_rosVel.angular.z = -m_max_angular_velocity;&lt;br /&gt;&amp;nbsp; &amp;nbsp; } else if (fabs(m_rosVel.angular.z) &amp;lt; 0.01) {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; m_rosVel.angular.z = 0.0;&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; m_rosVelOut.write();&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&amp;nbsp; return RTC::RTC_OK;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;extern "C"&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;&amp;nbsp; void JoyRTM2velROSInit(RTC::Manager* manager)&lt;br /&gt;&amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; coil::Properties profile(joyrtm2velros_spec);&lt;br /&gt;&amp;nbsp; &amp;nbsp; manager-&amp;gt;registerFactory(profile,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RTC::Create&amp;lt;JoyRTM2velROS&amp;gt;,&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;RTC::Delete&amp;lt;JoyRTM2velROS&amp;gt;);&lt;br /&gt;&amp;nbsp; }&lt;br /&gt;&lt;br /&gt;};&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-4933180427263849231?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/4933180427263849231/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/08/openrtm-asit-rosros-port.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/4933180427263849231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/4933180427263849231'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/08/openrtm-asit-rosros-port.html' title='OpenRTM-asit ROSパッチ(ros port)を使ってルンバを操縦する'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/r_6ofHjgySg/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-6110869069666397076</id><published>2011-08-16T19:44:00.001+09:00</published><updated>2011-08-16T23:15:30.627+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenRTM-aist'/><title type='text'>OpenRTM-asit ROSパッチを試す(インストール編）</title><content type='html'>OpenRTMにROS通信を追加するパッチがあります。&lt;br /&gt;これを使ってみます。&lt;br /&gt;&lt;br /&gt;環境はUbuntu10.04、ROSはdiamondbackです。&lt;br /&gt;かなり苦労しました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.openrtm.org/OpenRTM-aist/html/E3839EE3838BE383A5E382A2E383AB2Frosport.html"&gt;http://www.openrtm.org/OpenRTM-aist/html/E3839EE3838BE383A5E382A2E383AB2Frosport.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;ソースからOpenRTM-aistをビルドする必要ああるのでソースをゲットします。&lt;br /&gt;１．０．０です。&lt;br /&gt;&lt;br /&gt;$ wget&amp;nbsp;&lt;a href="http://www.openrtm.org/pub/OpenRTM-aist/cxx/1.0.0/OpenRTM-aist-1.0.0-RELEASE.tar.bz2"&gt;http://www.openrtm.org/pub/OpenRTM-aist/cxx/1.0.0/OpenRTM-aist-1.0.0-RELEASE.tar.bz2&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;パッチもゲット&lt;br /&gt;$ wget&amp;nbsp;&lt;a href="http://www.openrtm.org/pub/OpenRTM-aist/cxx/1.0.0/ros_transport.patch-1.0.1.tar.gz"&gt;http://www.openrtm.org/pub/OpenRTM-aist/cxx/1.0.0/ros_transport.patch-1.0.1.tar.gz&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;aptでいれたOpenRTM-aistは削除しておきます。&lt;/div&gt;&lt;div&gt;$ sudo apt-get remove openrtm-aist-example openrtm-aist openrtm-aist-dev&lt;/div&gt;&lt;br /&gt;パッケージの展開&lt;br /&gt;$ tar jxvf OpenRTM-aist-1.0.0-RELEASE.tar.bz2&lt;br /&gt;$ tar zxvf ros_transport.patch-1.0.1.tar.gz&lt;br /&gt;$ cd OpenRTM-aist-1.0.0&lt;br /&gt;&lt;br /&gt;&lt;div&gt;パッチを当てます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$&amp;nbsp;patch -p0 &amp;lt; ../ros_transport.patch&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;そしてautoconfができるようにlibtool.m4を現在使っているシステムのものと入れ替えます（ここ重要）&lt;/div&gt;&lt;div&gt;&lt;div&gt;$ find . -name libtool.m4 -exec cp /usr/share/aclocal/libtool.m4 {} \;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;さらにsrc/lib/rtm/Makefile.amの以下の変数を次のように書き換えます。（ここも重要）&lt;/div&gt;&lt;div&gt;(cturtleを使っている場合はこれなくても動くようです）&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;ros_cflags=`rospack export --lang=cpp --attrib=cflags roscpp`&lt;/div&gt;&lt;div&gt;ros_libs=`rospack export --lang=cpp --attrib=lflags roscpp`&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;そしたらautoreconfして、あとはお決まりの流れです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$ autoreconf -ifv&lt;/div&gt;&lt;/div&gt;&lt;div&gt;$ ./configure&lt;/div&gt;&lt;div&gt;$ make&lt;br /&gt;&lt;br /&gt;インストール&lt;/div&gt;&lt;div&gt;$ sudo make install&amp;nbsp;&lt;/div&gt;&lt;div&gt;これで/usr/local/以下にインストールされます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;@hyaguchijskさんに協力をいただきました。ありがとうございました。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;次にサンプルをmakeします。&lt;/div&gt;&lt;div&gt;$ wget http://www.openrtm.org/pub/OpenRTM-aist/cxx/1.0.0/examples.ros-1.0.0.tar.gz&lt;/div&gt;&lt;div&gt;$ tar zxvf examples.ros-1.0.0.tar.gz&lt;/div&gt;&lt;div&gt;$ cd examples.ros&lt;/div&gt;&lt;div&gt;$ cd publisher&lt;/div&gt;&lt;div&gt;$ make&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$ cd ../subscriber&lt;/div&gt;&lt;div&gt;$ make&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;この状態でpublisherCompとsubscriberCompを動かしてActivateすると&lt;/div&gt;&lt;div&gt;それぞれPub/Subしてくれます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;やっと動いた・・・。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/736fb816a154ef2139b3fcd52cd4c61c.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="225" src="http://gyazo.com/736fb816a154ef2139b3fcd52cd4c61c.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-6110869069666397076?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/6110869069666397076/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/08/openrtm-asit-ros.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6110869069666397076'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6110869069666397076'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/08/openrtm-asit-ros.html' title='OpenRTM-asit ROSパッチを試す(インストール編）'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-1335358988865956342</id><published>2011-08-16T10:55:00.000+09:00</published><updated>2011-08-16T10:55:09.108+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenRTM-aist'/><title type='text'>続OpenRTM-aist</title><content type='html'>引き続きOpenRTMのサンプルを試してみました。&lt;br /&gt;移動ロボットを仮想ジョイパッドで動かすことができます。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/f216e16cef577dd998a352ce5788e139.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://gyazo.com/f216e16cef577dd998a352ce5788e139.png" width="303" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;やっぱりかなりハマりました。&lt;br /&gt;でも↓のサイトにだいたい書いてあります。&lt;br /&gt;非常に参考になりました。&lt;br /&gt;&lt;a href="http://code.google.com/p/rtm-ros-robotics/wiki/RTM_2DSimulator_Example"&gt;http://code.google.com/p/rtm-ros-robotics/wiki/RTM_2DSimulator_Example&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;とくに&lt;br /&gt;$ sudo apt-get install tix&lt;br /&gt;とか、実はバグがあるとか、ハマりどころを押さえていますね。&lt;br /&gt;&lt;br /&gt;公式ドキュメントもアップデートしていただきたい所です。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-1335358988865956342?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/1335358988865956342/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/08/openrtm-aist_16.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/1335358988865956342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/1335358988865956342'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/08/openrtm-aist_16.html' title='続OpenRTM-aist'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-1429523179135031605</id><published>2011-08-11T22:43:00.005+09:00</published><updated>2011-08-19T22:46:41.214+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OpenRTM-aist'/><title type='text'>OpenRTM-aistのインストール（自分用メモ）</title><content type='html'>日本で唯一OpenRTMではなくROS陣営と思われている（？）私ですが、&lt;br /&gt;Electricがリリースされるまでネタがないので、&lt;br /&gt;たまにはOpenRTMやってみようと思いました。&lt;br /&gt;以下はメモ書きみたいなものです。&lt;br /&gt;&lt;br /&gt;OpenRTMはまずこれやれ、っていうのがあったら教えてください。&lt;br /&gt;ルンバをOpenRTMで動かせるか教えてください。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;OpenRTM-aist 1.00(C++) on Ubuntu 10.04です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.openrtm.org/openrtm/ja/node/1001"&gt;http://www.openrtm.org/openrtm/ja/node/1001&lt;/a&gt;&lt;br /&gt;に従いインストールしてみます。&lt;br /&gt;&lt;br /&gt;OpenRTMはysugaさんが紹介していますね。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://ysuga.net/robot/rtm"&gt;http://ysuga.net/robot/rtm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;１．source.listの編集&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;/etc/apt/source.list.d/openrtm.list&lt;br /&gt;に&lt;br /&gt;&lt;br /&gt;deb http://www.openrtm.org/pub/Linux/ubuntu lucid main&lt;br /&gt;&lt;div&gt;を追加。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;２．インストール&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;b&gt;２．１．C++版インストール&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;以下のようにしてみました。成功したけど、これで動くかな。&lt;br /&gt;&lt;blockquote&gt;$ sudo apt-get update&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="line-height: 24px;"&gt;$ sudo apt-get install gcc g++ make uuid-dev&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span"&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px; white-space: pre-wrap;"&gt;$ sudo apt-get install libomniorb4-dev omniidl4 ominiorb4-nameserver&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace;"&gt;&lt;blockquote&gt;$ sudo apt-get install openrtm-aist openrtm-aist-doc openrtm-aist-dev openrtm-aist-example&lt;/blockquote&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;&lt;/pre&gt;&lt;pre&gt;&lt;div style="color: black; font-family: 'VL PGothic'; line-height: normal; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;（公式どおりやると以下のようにエラーがでました。&lt;/span&gt;&lt;/div&gt;&lt;div style="color: black; font-family: 'VL PGothic'; line-height: normal; white-space: normal;"&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'VL PGothic';"&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;$ apt-get install libomniorb4 libomniorb4-dev omniidl4 omniorb4-nameserver&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'VL PGothic';"&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;パッケージリストを読み込んでいます... 完了&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'VL PGothic';"&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;依存関係ツリーを作成しています &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="font-family: 'VL PGothic';"&gt;&lt;span class="Apple-style-span" style="white-space: normal;"&gt;状態情報を読み取っています... 完了&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;E: パッケージ libomniorb4 が見つかりません）&lt;/blockquote&gt;&lt;div style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px; white-space: pre-wrap;"&gt;&lt;b&gt;２．２．Python版インストール&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px; white-space: pre-wrap;"&gt;Python版もいれてしまいましょう。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="color: #323232; font-family: 'Trebuchet MS', 'Helvetica neue', Helvetica, Arial, Verdana, sans-serif; line-height: 18px; white-space: normal;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="pearwiki_pre" style="background-color: #eeeeee; border-bottom-color: rgb(136, 136, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(102, 102, 102); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(136, 136, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(102, 102, 102); border-top-style: solid; border-top-width: 1px; color: black; font: normal normal normal 1.1em/160% Verdana, Arial, Helvetica, sans-serif; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; margin-top: 15px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em; white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;&lt;span class="Apple-style-span" style="color: #323232; font-family: 'Trebuchet MS', 'Helvetica neue', Helvetica, Arial, Verdana, sans-serif; font-size: small; line-height: 18px; white-space: normal;"&gt;# apt-get install python-omniorb2-omg omniidl4-python&lt;/span&gt;&lt;/pre&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;&lt;span class="Apple-style-span" style="color: #323232; font-family: 'Trebuchet MS', 'Helvetica neue', Helvetica, Arial, Verdana, sans-serif; font-size: small; line-height: 18px; white-space: normal;"&gt;# apt-get install openrtm-aist-python openrtm-aist-python-example&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0.8em; margin-left: 0.8em; margin-top: 0.4em;"&gt;&lt;/div&gt;&lt;div style="color: black;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px; white-space: pre-wrap;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;div style="color: black; font-family: 'VL PGothic'; font-size: 13px; line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; white-space: normal;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;&lt;b&gt;２．３．Eclipseとツールのインストール&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="color: black; font-family: 'VL PGothic'; font-size: 13px; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; white-space: normal;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="color: black; font-family: monospace; font-size: 13px; line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; white-space: pre;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px; white-space: pre-wrap;"&gt;参考　&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;&lt;a href="http://openrtm.org/openrtm/ja/node/941"&gt;http://openrtm.org/openrtm/ja/node/941&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="color: black; font-family: 'VL PGothic'; font-size: 13px; line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; white-space: normal;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;全部入りをダウンロードします。&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="font-family: monospace; font-size: 13px; line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; white-space: pre;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px; white-space: pre-wrap;"&gt;&lt;a href="http://www.openrtm.org/pub/OpenRTM-aist/tools/1.0.0/eclipse342_rtmtools100release_linux_ja.tar.gz"&gt;http://www.openrtm.org/pub/OpenRTM-aist/tools/1.0.0/eclipse342_rtmtools100release_linux_ja.tar.gz&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="font-family: monospace; font-size: 13px; line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; white-space: pre;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-size: small;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px; white-space: pre-wrap;"&gt;$ tar zxvf eclipse342_rtmtools100release_linux_ja.tar.gz&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px; white-space: pre-wrap;"&gt;$ cd eclipse&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px; white-space: pre-wrap;"&gt;$ ./eclipse&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif;"&gt;&lt;span class="Apple-style-span" style="line-height: 20px; white-space: pre-wrap;"&gt;で起動。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="font-family: monospace; font-size: 13px; line-height: normal; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; white-space: pre;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="color: black; font-family: 'VL PGothic'; line-height: normal; white-space: normal;"&gt;&lt;/div&gt;&lt;div style="color: black; font-family: 'VL PGothic'; line-height: normal; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 19px; white-space: pre;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 19px; white-space: pre;"&gt;&lt;b&gt;３．動作確認&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: black; font-family: 'VL PGothic'; line-height: normal; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 19px; white-space: pre;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: black; font-family: 'VL PGothic'; line-height: normal; white-space: normal;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 19px; white-space: pre;"&gt;次に何やればいいかわからなかったけどぐぐったらでました。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;&lt;a href="http://openrtm.org/openrtm/ja/content/%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D-linux%E7%B7%A8"&gt;http://openrtm.org/openrtm/ja/content/%E5%8B%95%E4%BD%9C%E7%A2%BA%E8%AA%8D-linux%E7%B7%A8&lt;/a&gt;&lt;/span&gt;&lt;/pre&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;&lt;/pre&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;３．１．ネームサーバの起動&lt;/span&gt;&lt;/pre&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;&lt;/pre&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;$ rtm-naming&lt;/span&gt;&lt;/pre&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;&lt;/pre&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;３．２　コンフィグ作成&lt;/span&gt;&lt;/pre&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;$ mkdir ~/RTCwork&lt;/span&gt;&lt;/pre&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;$ cd ~/RTCwork&lt;/span&gt;&lt;/pre&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;して、以下の内容でrtc.confを作成.最初のnameserversのところは&lt;/span&gt;localhostでは動きませんでした。ipv6のせいだそうです。&lt;/pre&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="color: #323232; font-family: 'Trebuchet MS', 'Helvetica neue', Helvetica, Arial, Verdana, sans-serif; font-size: x-small; line-height: 18px; white-space: normal;"&gt;&lt;div class="pearwiki_pre" style="background-color: #eeeeee; border-bottom-color: rgb(136, 136, 153); border-bottom-style: solid; border-bottom-width: 1px; border-left-color: rgb(102, 102, 102); border-left-style: solid; border-left-width: 1px; border-right-color: rgb(136, 136, 153); border-right-style: solid; border-right-width: 1px; border-top-color: rgb(102, 102, 102); border-top-style: solid; border-top-width: 1px; color: black; font: normal normal normal 1.1em/160% Verdana, Arial, Helvetica, sans-serif; margin-bottom: 15px; margin-left: 15px; margin-right: 15px; margin-top: 15px; overflow-x: hidden; overflow-y: hidden; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em; white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;corba.nameservers: 127.0.0.1&lt;br /&gt; naming.formats: %h.host_cxt/%n.rtc&lt;br /&gt; logger.enable: NO&lt;br /&gt; example.ConsoleOut.config_file: consout.conf&lt;br /&gt; example.ConsoleIn.config_file: consin.conf&lt;/pre&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;&lt;b&gt;３．３。サンプル実行&lt;/b&gt;&lt;/pre&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;以下のようにしてインストールされているサンプルを実行&lt;/span&gt;&lt;/pre&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;インプット側。&lt;/span&gt;&lt;/pre&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;$ cd ~/RTCwork&lt;/span&gt;&lt;/pre&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;&lt;span class="Apple-style-span" style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;$ /usr/share/OpenRTM-aist/examples/ConsoleInComp -f rtc.conf &lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;div style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;アウトプット側。&lt;br /&gt;$ cd ~/RTCwork&lt;/div&gt;&lt;div style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;&lt;pre style="color: black; font-family: 'Lucida Console', Monaco, 'Courier New', Courier, monospace; line-height: 1.5em;"&gt;$ /usr/share/OpenRTM-aist/examples/ConsoleOutComp -f rtc.conf &lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;(公式はexampsになっているので注意。)&lt;/div&gt;&lt;div style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; white-space: pre-wrap;"&gt;また、必ずcd ~/RTCworkしてください。&lt;br /&gt;&lt;br /&gt;あとはEclipseのSystemEditorから接続すればOK!&lt;br /&gt;できたーーー！！&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-9gtuNmIFIYk/TkPh9C7Z5LI/AAAAAAAAL8Y/TkykOWRha3k/s1600/disp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="245" src="http://2.bp.blogspot.com/-9gtuNmIFIYk/TkPh9C7Z5LI/AAAAAAAAL8Y/TkykOWRha3k/s320/disp.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;最後めっちゃ端折りましたが、SystemEditorが全く動かなくて困りました。&lt;br /&gt;が、実はrtc.confにlocalhostと書いていたのが原因でした。&lt;br /&gt;&lt;br /&gt;うーん疲れた。&lt;/div&gt;&lt;div&gt;&lt;div style="font-size: 13px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-1429523179135031605?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/1429523179135031605/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/08/openrtm-aist.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/1429523179135031605'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/1429523179135031605'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/08/openrtm-aist.html' title='OpenRTM-aistのインストール（自分用メモ）'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-9gtuNmIFIYk/TkPh9C7Z5LI/AAAAAAAAL8Y/TkykOWRha3k/s72-c/disp.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-933371709598177982</id><published>2011-08-11T08:34:00.005+09:00</published><updated>2011-08-11T11:06:53.718+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='PR2'/><category scheme='http://www.blogger.com/atom/ns#' term='Willow Garage'/><title type='text'>PR2 SE発表</title><content type='html'>Willow Garageの新しいロボットPR２ SEが発表されました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.willowgarage.com/blog/2011/08/10/announcing-pr2se"&gt;http://www.willowgarage.com/blog/2011/08/10/announcing-pr2se&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;新しい、といってもPR2のアームが１本になって安くなっただけです。&lt;br /&gt;でもセンサも新しくなるようです。Kinect搭載かな？&lt;br /&gt;&lt;br /&gt;気になるお値段は $285,000 = 約２２００万円！&lt;br /&gt;オープンソースへの貢献をすれば３割引なので、&lt;br /&gt;１５００万円で買えます。&lt;br /&gt;たしかPR2は$400,000だから、まあまあお得ですね。&lt;br /&gt;これは個人でも手が届く範囲ですね！&lt;br /&gt;&lt;br /&gt;って全然無理だな。。。&lt;br /&gt;&lt;br /&gt;研究機関ならがんばれば買えるのかな。。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-933371709598177982?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/933371709598177982/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/08/pr2-se.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/933371709598177982'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/933371709598177982'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/08/pr2-se.html' title='PR2 SE発表'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-8828375985548468901</id><published>2011-07-13T23:16:00.002+09:00</published><updated>2011-07-14T13:06:28.831+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Roomba'/><category scheme='http://www.blogger.com/atom/ns#' term='AR.Drone'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>ARDroneとルンバを同時にPS3のコントローラで動かす</title><content type='html'>AR.Droneとルンバを１つのPS３のジョイパッドから同時にうごかしてみました。&lt;br /&gt;ROSのPub/Subを利用した楽しい例だと思います。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/hIExpfrR3Co/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/hIExpfrR3Co?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266"  src="http://www.youtube.com/v/hIExpfrR3Co?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;前回紹介したardrone_brownノードと、昔作ったルンバ用のプログラムを組み合わせたら簡単にできました。&lt;br /&gt;ルンバの掃除開始と同期してヘリが飛び立ったら面白いと思い、掃除機のモータ指令メッセージ（Bool型）をardroneのEmpty型へ変換して送信するノードを作りました。&lt;br /&gt;これによりルンバへの速度指令と、掃除開始（離陸）、終了（着陸）が同時にAR.Droneに送られるようになります。&lt;br /&gt;&lt;br /&gt;ノードとトピックは↓のような感じ。&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://1.bp.blogspot.com/-wZ9wKC4mawg/Th5rNXS9t-I/AAAAAAAAL4o/wV2yeI4IOBk/s1600/AR.DROOMBA-----.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="277" src="http://1.bp.blogspot.com/-wZ9wKC4mawg/Th5rNXS9t-I/AAAAAAAAL4o/wV2yeI4IOBk/s400/AR.DROOMBA-----.png" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;メッセージ変換のコードは↓のような感じです。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;#!/usr/bin/env python&lt;br /&gt;import roslib&lt;br /&gt;roslib.load_manifest('otl_msgconverter')&lt;br /&gt;import rospy&lt;br /&gt;from std_msgs.msg import Bool&lt;br /&gt;from std_msgs.msg import Empty&lt;br /&gt;class BoolMsg2EmpyMsg():&lt;br /&gt;&amp;nbsp; &amp;nbsp; """ convert bool msg to empy msg&lt;br /&gt;&amp;nbsp; &amp;nbsp; """&lt;br /&gt;&amp;nbsp; &amp;nbsp; def __init__(self, bool_topic, true_topic, false_topic):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self._bool_topic = bool_topic&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self._true_topic = true_topic&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self._false_topic = false_topic&lt;br /&gt;&amp;nbsp; &amp;nbsp; def callback(self, bool_value):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; msg = Empty()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if (bool_value.data):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self._true_pub.publish(msg)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self._false_pub.publish(msg)&lt;br /&gt;&amp;nbsp; &amp;nbsp; def init(self):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self._true_pub = rospy.Publisher(self._true_topic, Empty)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self._false_pub = rospy.Publisher(self._false_topic, Empty)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self._sub = rospy.Subscriber(self._bool_topic, Bool, self.callback)&lt;br /&gt;if __name__=='__main__':&lt;br /&gt;&amp;nbsp; &amp;nbsp; rospy.init_node('otl_bool2empty')&lt;br /&gt;&amp;nbsp; &amp;nbsp; obj = BoolMsg2EmpyMsg('input', 'true', 'false')&lt;br /&gt;&amp;nbsp; &amp;nbsp; obj.init()&lt;br /&gt;&amp;nbsp; &amp;nbsp; rospy.spin()&lt;/blockquote&gt;&lt;div&gt;ヘリは迫力があっていいですね。&lt;/div&gt;&lt;div&gt;着陸も成功させたかった！&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-8828375985548468901?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/8828375985548468901/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/07/ardroneps3.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/8828375985548468901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/8828375985548468901'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/07/ardroneps3.html' title='ARDroneとルンバを同時にPS3のコントローラで動かす'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/-wZ9wKC4mawg/Th5rNXS9t-I/AAAAAAAAL4o/wV2yeI4IOBk/s72-c/AR.DROOMBA-----.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-5451030954132018038</id><published>2011-07-13T00:49:00.001+09:00</published><updated>2011-07-13T22:25:07.013+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='AR.Drone'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>ARDroneをROSで動かす</title><content type='html'>&lt;a href="http://www.amazon.co.jp/gp/product/B0042ESRM8/ref=as_li_ss_tl?ie=UTF8&amp;amp;tag=otofbl-22&amp;amp;linkCode=as2&amp;amp;camp=247&amp;amp;creative=7399&amp;amp;creativeASIN=B0042ESRM8%22%3EAR.Drone%3C/a%3E%3Cimg%20src=%22http://www.assoc-amazon.jp/e/ir?t=&amp;amp;l=as2&amp;amp;o=9&amp;amp;a=B0042ESRM8%22%20width=%221%22%20height=%221%22%20border=%220%22%20alt=%22%22%20style=%22border:none%20!important;%20margin:0px%20!important;%22%20/%3E"&gt;ARDrone&lt;/a&gt;というヘリがあります。&lt;br /&gt;３万弱でカメラ２つついていて、iPhoneで動かせちゃうすごいヘリです。&lt;br /&gt;しかもSDKがついていてPCやiPhone, Android等で自由にプログラミングできます。&lt;br /&gt;&lt;br /&gt;これがROSから簡単に使えるようになっているので紹介します。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://code.google.com/p/brown-ros-pkg/wiki/ardrone_brown"&gt;http://code.google.com/p/brown-ros-pkg/wiki/ardrone_brown&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;前回紹介したbrown-ros-pkgです。&lt;br /&gt;ただしまだaptでは入れられないのでソースからです。&lt;br /&gt;&lt;br /&gt;【インストール】&lt;br /&gt;$ svn checkout http://brown-ros-pkg.googlecode.com/svn/trunk/experimental/ardrone_brown&lt;br /&gt;&lt;div&gt;$ cd ardrone_brown&lt;/div&gt;&lt;div&gt;$ ./build_sdk.sh&lt;/div&gt;&lt;div&gt;$ rosmake&lt;/div&gt;&lt;div&gt;$ cmake .&lt;/div&gt;&lt;div&gt;$ make&lt;/div&gt;&lt;div&gt;(Makefileのcommit忘れかな？）&lt;br /&gt;&lt;br /&gt;【実行】&lt;/div&gt;&lt;div&gt;$ rosrun ardrone_brown ardrone_driver&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;【離陸】&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; max-width: 70em; overflow-x: auto; overflow-y: auto; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="pln" style="color: black;"&gt;$ rostopic pub &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;ardrone&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;takeoff std_msgs&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Empty&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="typ" style="color: #660066;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="typ"&gt;【着陸】&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="typ"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre class="prettyprint" style="background-color: #eeeeee; font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace; max-width: 70em; overflow-x: auto; overflow-y: auto; padding-bottom: 0.5em; padding-left: 0.5em; padding-right: 0.5em; padding-top: 0.5em;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="typ"&gt;&lt;span class="pln" style="color: black;"&gt;$ rostopic pub &lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;ardrone&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="pln" style="color: black;"&gt;land std_msgs&lt;/span&gt;&lt;span class="pun" style="color: #666600;"&gt;/&lt;/span&gt;&lt;span class="typ" style="color: #660066;"&gt;Empty&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;div style="color: black;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="typ"&gt;&lt;span class="typ" style="color: #660066;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="typ"&gt;あとは/cmd_velに速度を入力すれば思い通りに動きます。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: arial, sans-serif;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="typ"&gt;【カメラ画像の表示】もできますよ。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="typ"&gt;$ rosrun image_view image_view image:=/ardrone/image_raw&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="typ"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="typ"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-family: 'VL PGothic'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="typ"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="typ"&gt;ドキュメントにないけど、&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-family: 'VL PGothic'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="typ"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="typ"&gt;$ rostopic pub /ardrone/togglecam std_msgs/Empty&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="-webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; font-family: 'VL PGothic'; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="typ"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="typ"&gt;すると、フロントカメラと、下向きかめらとフロントの合成、との切り替えができます。&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="typ"&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="typ"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="typ"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="-webkit-border-horizontal-spacing: 2px; -webkit-border-vertical-spacing: 2px; font-family: arial, sans-serif;"&gt;&lt;span class="typ"&gt;という感じでいつものROSっぽく動かすことができます。&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-5451030954132018038?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/5451030954132018038/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/07/ardroneros.html#comment-form' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/5451030954132018038'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/5451030954132018038'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/07/ardroneros.html' title='ARDroneをROSで動かす'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-2843107868021724807</id><published>2011-07-11T21:42:00.000+09:00</published><updated>2011-07-11T21:42:58.685+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>ROSリポジトリドメイン変更</title><content type='html'>Kenさんからメーリスに以下のようなメールがきていました。&lt;br /&gt;&lt;br /&gt;要するに、Ubuntuユーザはaptラインにcode.ros.orgの代わりにpakcages.ros.org/ros/ubuntuを使ってね。ということ見たいです。&lt;br /&gt;今はcode.ros.orgも使えるけど、&lt;br /&gt;diamondbackの次のリリース(Electric)からはもう使えないからね。&lt;br /&gt;ってことみたいです。&lt;br /&gt;&lt;br /&gt;要チェックです。&lt;br /&gt;&lt;br /&gt;For Diamondback, we switched our main debian package source to be&lt;br /&gt;http://packages.ros.org/ros/ubuntu . &amp;nbsp;We made this shift due to load&lt;br /&gt;issues. &amp;nbsp;We have been mirroring the old code.ros.org source, but this&lt;br /&gt;mirroring is not in place for the upcoming Electric release.&lt;br /&gt;&lt;br /&gt;In order to ensure that you will be able to receive the Electric&lt;br /&gt;update properly, we recommend that you go ahead and migrate your&lt;br /&gt;/etc/apt/sources.list.d/ros-latest.list file to use:&lt;br /&gt;&lt;br /&gt;http://packages.ros.org/ros/ubuntu&lt;br /&gt;&lt;br /&gt;instead of:&lt;br /&gt;&lt;br /&gt;http://code.ros.org/packages/ros/ubuntu&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-2843107868021724807?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/2843107868021724807/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/07/ros.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/2843107868021724807'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/2843107868021724807'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/07/ros.html' title='ROSリポジトリドメイン変更'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-3745127766340474276</id><published>2011-07-10T22:39:00.000+09:00</published><updated>2011-07-10T22:39:41.745+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>brown-ros-pkgがapt-getできる</title><content type='html'>ブラウン大学のROSのリポジトリが&lt;a href="http://code.google.com/p/brown-ros-pkg/"&gt;brown-ros-pkg&lt;/a&gt;です。&lt;br /&gt;willow管理のリポジトリ以外はapt-getじゃなくてソースを持ってきてインストールするもの、&lt;br /&gt;と思っていましたが、brown-ros-pkgはいくつかちゃんとリリースされて、&lt;br /&gt;apt-getで入るようになっているんですね。&lt;br /&gt;&lt;br /&gt;リリースされているのは&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;brown_drivers&lt;/li&gt;&lt;li&gt;brown_perception&lt;/li&gt;&lt;li&gt;brown_remotelab&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;の３つのスタックで、&lt;/div&gt;&lt;div&gt;それぞれ、&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;irobot_create_2_1 (ルンバドライバ)&lt;/li&gt;&lt;li&gt;gscam (gstreamerべーすのカメラドライバ）&lt;/li&gt;&lt;li&gt;rosbridge/pr2_keyboard_teleoperator/teleop_twist_keyboard&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;がパッケージとして入っています。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;インストールするには&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$ sudo apt-get install ros-diamondback-brown-drivers&lt;/div&gt;&lt;div&gt;とか、&lt;/div&gt;&lt;div&gt;&lt;div&gt;$ sudo apt-get install ros-diamondback-brown-remotelab&lt;/div&gt;&lt;/div&gt;&lt;div&gt;とかすると入ります。&lt;/div&gt;&lt;div&gt;楽チン。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;brown-perceptionは何故か見つかりませんでした。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$ sudo apt-get install ros-diamondback-otl-drivers&lt;/div&gt;&lt;div&gt;とかできる日がいつかくるのか！&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ムネアツです。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-3745127766340474276?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/3745127766340474276/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/07/brown-ros-pkgapt-get.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/3745127766340474276'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/3745127766340474276'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/07/brown-ros-pkgapt-get.html' title='brown-ros-pkgがapt-getできる'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-8280285902556467998</id><published>2011-07-06T23:31:00.000+09:00</published><updated>2011-07-06T23:31:23.300+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Ubuntu 11.04 natty narwhalでROSのapt</title><content type='html'>いつのまにかUbuntu11.04のROSパッケージがきていましたね。&lt;br /&gt;これでソースからコンパイルしないですみます。&lt;br /&gt;やっぱりバイナリは楽です。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ros.org/wiki/diamondback/Installation/Ubuntu"&gt;http://www.ros.org/wiki/diamondback/Installation/Ubuntu&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;/etc/apt/sources.list.d/ros-latest.list&lt;br /&gt;に&lt;br /&gt;deb http://packages.ros.org/ros/ubuntu natty main&lt;br /&gt;と書いて&lt;br /&gt;&lt;br /&gt;$ sudo apt-get update&lt;br /&gt;$ sudo apt-get install ros-diamondback-desktop-full&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;でOKですね。&lt;br /&gt;いつのまにやらドメインが変わっていますね。&lt;br /&gt;.bashrcの編集も忘れずに。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-8280285902556467998?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/8280285902556467998/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/07/ubuntu-1104-natty-narwhalrosapt.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/8280285902556467998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/8280285902556467998'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/07/ubuntu-1104-natty-narwhalrosapt.html' title='Ubuntu 11.04 natty narwhalでROSのapt'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-1871726981866644358</id><published>2011-06-14T23:40:00.000+09:00</published><updated>2011-06-14T23:40:10.471+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Original'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>プライベートなパッケージだけにroscdするotlcdを作ったよ</title><content type='html'>Minecraftがこのブログのトップにあると色々不安なので更新します。&lt;br /&gt;&lt;br /&gt;私は一応趣味でrosのパッケージを作ってみています。&lt;br /&gt;大体パッケージ名はotl_hogehogeという名前になっています。&lt;br /&gt;rosはwikiのドキュメントとかがいきなりパッケージ名なので、これが他の人とかぶると困るからです。&lt;br /&gt;&lt;br /&gt;普段、自分が作ったパッケージに移動(cd)するには&lt;br /&gt;&lt;br /&gt;$ roscd otl_&lt;br /&gt;と入力して、Tabを押してそこから目的のパッケージを探しています。&lt;br /&gt;&lt;br /&gt;これをもっと簡単にするotlcdを作ります。&lt;br /&gt;&lt;br /&gt;$ otlcd&lt;br /&gt;と入力して、Tabを押すと&lt;br /&gt;$ otlcd otl_&lt;br /&gt;と展開されて、もう一度Tabを押すと候補("otl_"で始まるパッケージ）一覧が表示される、という状態にしたいです。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;というわけでroscdを参考に、というか、ちょっとだけいじって作ってみました。&lt;br /&gt;ソースは以下のような感じ。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="background-color: #fff2cc;"&gt;function _otlcomplete_sub_dir {&lt;br /&gt;&amp;nbsp; &amp;nbsp; local arg opts rosvals&lt;br /&gt;&amp;nbsp; &amp;nbsp; COMPREPLY=()&lt;br /&gt;&amp;nbsp; &amp;nbsp; arg="${COMP_WORDS[COMP_CWORD]}"&lt;br /&gt;&amp;nbsp; &amp;nbsp; _ros_decode_path ${arg}&lt;br /&gt;&amp;nbsp; &amp;nbsp; if [[ -z ${rosvals[2]} ]]; then&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; opts=`_ros_list_locations | grep ^${OTLCD_PREFIX}`&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IFS=$'\n'&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; COMPREPLY=($(compgen -W "${opts}" -S / -- ${rosvals[0]}))&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unset IFS&lt;br /&gt;&amp;nbsp; &amp;nbsp; else&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if [ -e ${rosvals[1]}${rosvals[2]} ]; then&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; opts=`find -H ${rosvals[1]}${rosvals[2]} -maxdepth 1 -mindepth 1 -type d&lt;br /&gt;&amp;nbsp;! -regex ".*/[.].*" -print0 | tr '\000' '\n' | sed -e "s/.*\/\(.*\)/\1\//g"`&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; opts=''&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; fi&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IFS=$'\n'&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; COMPREPLY=($(compgen -P ${rosvals[0]}${rosvals[2]} -W "${opts}" -- ${rosvals[3]}))&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; unset IFS&lt;br /&gt;&amp;nbsp; &amp;nbsp; fi&lt;br /&gt;}&lt;br /&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;alias otlcd=roscd&lt;br /&gt;complete -F "_otlcomplete_sub_dir" -o "nospace" "otlcd"&lt;/span&gt;&lt;/span&gt;&lt;/blockquote&gt;&lt;div&gt;これをotl_bashパッケージにotlbashというファイル名で作りました。&lt;/div&gt;&lt;div&gt;赤いところをいじってあとはrosbashのコピペです。&lt;/div&gt;&lt;div&gt;（やっつけ感がすごくてすみませんがsubversionにいれておきました）&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;.bashrcでsetup.bashを読み込んだあとで以下の記述を追加すると使えます。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;span class="Apple-style-span" style="background-color: #fff2cc;"&gt;export OTLCD_PREFIX="otl_"&lt;br /&gt;source `rospack find otl_bash`/otlbash&lt;/span&gt;&lt;/blockquote&gt;&lt;div&gt;OTLCD_PREFIXに好きな文字列を入れられるので、もし私と同じようなprefixをパッケージ名に付けている人はいかがでしょうか？&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-1871726981866644358?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/1871726981866644358/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/06/roscdotlcd.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/1871726981866644358'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/1871726981866644358'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/06/roscdotlcd.html' title='プライベートなパッケージだけにroscdするotlcdを作ったよ'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-1045432898051010288</id><published>2011-06-13T23:40:00.000+09:00</published><updated>2011-06-13T23:40:08.319+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雑談'/><title type='text'>Minecraft</title><content type='html'>こんばんわ。おひさしぶりです。&lt;br /&gt;&lt;br /&gt;最近本当にネタがありませんので&lt;br /&gt;私が最近はまっているゲームを紹介します。&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-size: large;"&gt;マインクラフト&lt;/span&gt;です。&lt;br /&gt;&lt;a href="http://www.minecraft.net/"&gt;http://www.minecraft.net/&lt;/a&gt;&lt;br /&gt;１５ユーロくらいします。↓は公式PV。&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="349" src="http://www.youtube.com/embed/m_yqOoUMHPg" width="560"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;FPS視点で、素材を集めて、道具を作り、またその道具で素材を集める。&lt;br /&gt;集めた素材で家を作ったり、トロッコを走らせたりさせます。&lt;br /&gt;&lt;br /&gt;ロボットとか作っちゃう男の子にはたまらないゲームです。&lt;br /&gt;マルチプレイにも対応しており、複数人で協力して巨大建造物を作ったりもできます。&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="349" src="http://www.youtube.com/embed/g-IlW4WOUcA" width="560"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;あとは、このゲームをプレイしている人の作る動画が面白い。&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="349" src="http://www.youtube.com/embed/giIKsvOnhwg" width="560"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;Classic版は無料なのでWeb上で試してみたらいかがでしょうか。&lt;br /&gt;&lt;a href="http://www.minecraft.net/play.jsp"&gt;http://www.minecraft.net/play.jsp&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;もちろん私は買いました。&lt;br /&gt;意外とまだ長時間やっていません。いったんやりだすと止まらないので自重しております。&lt;br /&gt;&lt;br /&gt;以上完全に雑談でした。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-1045432898051010288?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/1045432898051010288/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/06/minecraft.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/1045432898051010288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/1045432898051010288'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/06/minecraft.html' title='Minecraft'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/m_yqOoUMHPg/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-8922593237192525694</id><published>2011-05-15T23:40:00.000+09:00</published><updated>2011-05-15T23:40:23.009+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Original'/><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Robot'/><category scheme='http://www.blogger.com/atom/ns#' term='Arduino'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>テレプレゼンスロボット作ってみた</title><content type='html'>前から興味があったので作ってみました。&lt;br /&gt;rosjsとかはこのために勉強しました。&lt;br /&gt;&lt;br /&gt;ハード、ソフト的にもほとんど揃っていたので制作費０円、製作時間１日、っていう感じです。&lt;br /&gt;出先からiPhoneさえあれば使えるので、これから実際にいろいろと利用してみたいと思います。&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="349" src="http://www.youtube.com/embed/BGD65s-9d58" width="425"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;ハードウェア構成：&lt;br /&gt;ルンバ &amp;lt;- bluetoothアダプタFriskRoomba(by longjie) -&amp;gt; Thinkpad X61 tablet&lt;br /&gt;サーボモータ &amp;lt;- Arduino -&amp;gt; Thinkpad&lt;br /&gt;USB Camera &amp;lt;-&amp;gt; Thinkpad&lt;br /&gt;Thinkpad &amp;lt;- rosbridge + rosjs -&amp;gt; iPhone/Macのブラウザ&lt;br /&gt;+ Skype&lt;br /&gt;という感じです。&lt;br /&gt;&lt;br /&gt;ビデオを撮ってみて思ったのは、全然面白みがないですね。&lt;br /&gt;なんていうか、普通というか。。。&lt;br /&gt;まあ、もうあるロボットコンセプトなんでこんなもんですね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-8922593237192525694?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/8922593237192525694/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/05/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/8922593237192525694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/8922593237192525694'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/05/blog-post.html' title='テレプレゼンスロボット作ってみた'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/BGD65s-9d58/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-3015217833901350169</id><published>2011-05-15T12:54:00.000+09:00</published><updated>2011-05-15T12:54:31.686+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>javascriptによるROS rosbridgeとrosjs</title><content type='html'>javascriptからROSに簡単に接続するライブラリがあります。&lt;br /&gt;rosbridgeパッケージとrosjsです。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ros.org/wiki/rosbridge"&gt;http://www.ros.org/wiki/rosbridge&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;まずはrosbridgeですが、&lt;br /&gt;JSONというデータでソケット通信できるものならROSのAPIを使えます。&lt;br /&gt;&lt;br /&gt;なのでjavascriptだけでなく、さまざまなものから利用できるようになっているようです。&lt;br /&gt;だから名前がrosbridgeなんですね。&lt;br /&gt;&lt;br /&gt;ようするにJSON形式でソケット通信するとそれをROSのAPIに変換してくれます。&lt;br /&gt;&lt;br /&gt;例えば、以下のデータをrosbridgeに送信すると、&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;{"receiver":"/topic","msg":{},"type":"package/Type"}&lt;/pre&gt;&lt;div style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;/topicというトピックに対してpackage/Type型で、中身が空のメッセージをpublishすることになります。&lt;/div&gt;&lt;div style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;例えば、よく使う速度を表すTwistだと以下のようになります。&lt;/div&gt;&lt;div&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; font-size: 15px; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;{"receiver":"/cmd_vel","msg":{"linear":{"x":0,"y":0,"z":0},"angular":{"x":0,"y":0,"z":0}},"type":"geometry_msgs/Twist"}&lt;/pre&gt;&lt;div style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;サービスも同様です。&lt;/div&gt;&lt;div&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; font-size: 15px; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;{"receiver":"/service","msg":[]}&lt;/pre&gt;&lt;div style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;rosbridgeは以下のようにして起動します。&lt;/div&gt;&lt;div style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;$ rosrun rosbridge rosbridge.py&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class="anchor" id="line-149"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-150"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;で、次にrosjsですが、この形式の通信をjavascriptから利用しやすくしたクライアントです。&lt;/div&gt;&lt;div style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;つまり、以下のような接続になります。ユーザはrosjsを使ってROS通信を行うことができます。&lt;/div&gt;&lt;div style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;span class="Apple-style-span" style="color: blue;"&gt;　ROS Server &amp;lt;-&amp;gt; rosbridge &amp;lt;-&amp;gt; rosjs&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;rosjsのドキュメントは以下のチュートリアルが詳しいです。&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px;"&gt;&lt;a href="http://www.ros.org/wiki/rosbridge/Tutorials/Using%20Javascript%20to%20control%20ROS%20via%20rosjs"&gt;http://www.ros.org/wiki/rosbridge/Tutorials/Using%20Javascript%20to%20control%20ROS%20via%20rosjs&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;接続を確立するには以下のように書きます。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px;"&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;&amp;lt;html&amp;gt;&lt;br /&gt;      &amp;lt;head&amp;gt;&lt;br /&gt;        &amp;lt;script type="text/javascript" src="http://brown-ros-pkg.googlecode.com/svn/tags/brown-ros-pkg/rosjs/ros.min.js"&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;        &amp;lt;script type="text/javascript"&amp;gt;&lt;br /&gt;        &amp;lt;/script&amp;gt;&lt;br /&gt;      &amp;lt;/head&amp;gt;&lt;br /&gt;    &amp;lt;body onload="main()"&amp;gt;&lt;br /&gt;    function main() {&lt;br /&gt;      var x = 0;&lt;br /&gt;      var z = 0;&lt;br /&gt;      var connection = new connection.Connection("ws://hostname:9090");&lt;br /&gt;      connection.setOnClose(function (e) {&lt;br /&gt;        document.write('connection closed&amp;lt;br/&amp;gt;');&lt;br /&gt;      });&lt;br /&gt;      connection.setOnError(function (e) {&lt;br /&gt;        document.write('error!&amp;lt;br/&amp;gt;');&lt;br /&gt;      });&lt;br /&gt;      connection.setOnOpen(function (e) {&lt;br /&gt;        document.write('connected to ROS&amp;lt;br/&amp;gt;');&lt;br /&gt;      });&lt;br /&gt;    &amp;lt;/body&amp;gt;&lt;br /&gt;    &amp;lt;/html&amp;gt;&lt;/pre&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;hostnameにはrosbridgeが動いているマシン、9090はrosbridgeのデフォルトのポート番号です。基本的にsetOnOpenにやりたいことを書けばいいみたいです。&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;publishは非常に簡単で&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px;"&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;function pub() {&lt;br /&gt;      connection.publish('/cmd_vel', 'geometry_msgs/Twist', '{"linear":{"x":' + x + ',"y":0,"z":0}, "angular":{"x":0,"y":0,"z":' + z + '}}');&lt;br /&gt;    }&lt;/pre&gt;&lt;div&gt;と書けばよいです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;subscribeはちょっと面倒で、以下のように２つのメソッドを使います。&lt;/div&gt;&lt;div&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;connection.addHandler('/sensorPacket',function(msg) {&lt;br /&gt;        if (msg.bumpLeft || msg.bumpRight) {&lt;br /&gt;            alert('bump');    &lt;br /&gt;        }&lt;br /&gt;    });&lt;br /&gt;    connection.callService('/rosjs/subscribe','["/sensorPacket",0]',function(rsp) {&lt;br /&gt;        alert('subscribed to /sensorPacket');&lt;br /&gt;    });&lt;/pre&gt;&lt;div&gt;addHandlerでトピックに対するハンドラ（コールバック）を登録します。&lt;/div&gt;&lt;div&gt;で、実際にsubscribeをはじめるにはrosbridgeの/rosjs/subscribeというサービスを呼び出します。&lt;/div&gt;&lt;div&gt;これにより指定したトピックが発行されたときに登録したハンドラが呼び出されるようになります。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;serviceはすでに出てきましたが、以下のように書けばOK。３つ目の引数はserviceのresponseが入っています。&lt;/div&gt;&lt;span class="anchor" id="line-58"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-59"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-60"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;connection.callService('/soundOf','["tree falling in woods"],function(){});&lt;/pre&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class="anchor" id="line-91"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-92"&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;これでjavascriptからROSが使えますね。&lt;/div&gt;&lt;div&gt;興味を持った方はリンク先を参照ください。&lt;/div&gt;&lt;div&gt;RoombaをTwistメッセージで動かす例があります。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;今回はこれくらいにします。&lt;/div&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 15px;"&gt;&lt;span class="anchor" id="line-242"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 15px;"&gt;&lt;span class="anchor" id="line-243"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;&lt;span class="anchor" id="line-49" style="font-size: 15px;"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-50" style="font-size: 15px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;&lt;span class="anchor" id="line-41" style="font-size: 15px;"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-42" style="font-size: 15px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="line867" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;/div&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;span class="anchor" id="line-33"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;span class="anchor" id="line-34"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-3015217833901350169?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/3015217833901350169/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/05/javascriptros-rosbridgerosjs.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/3015217833901350169'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/3015217833901350169'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/05/javascriptros-rosbridgerosjs.html' title='javascriptによるROS rosbridgeとrosjs'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-7298070191780090202</id><published>2011-05-14T20:02:00.001+09:00</published><updated>2011-05-14T22:37:00.848+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><category scheme='http://www.blogger.com/atom/ns#' term='OpenCV'/><title type='text'>Ubuntu 11.04 natty narwhalでのopencv2パッケージのmake</title><content type='html'>11.04にしてからopencv2がmakeできなくて困っていました。&lt;br /&gt;&lt;br /&gt;ググったらメーリスが引っかかりました。&lt;br /&gt;&lt;a href="http://ros-users.122217.n3.nabble.com/Compiling-ROS-with-Ubuntu-11-04-Natty-td2895944.html"&gt;http://ros-users.122217.n3.nabble.com/Compiling-ROS-with-Ubuntu-11-04-Natty-td2895944.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;gt; I solved the issue.&lt;br /&gt;&amp;gt; Inorder to build ROS from source under Natty I just applied this&lt;br /&gt;&amp;gt; modified patch (copied it to the opencv2 folder) and added the line&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; SVN_PATCH = pythontest.patch v4l_2.6.38.patch&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; to the Makefile.&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; The Opencv package now builds with Natty (but i guess not with older&lt;br /&gt;&amp;gt; Ubuntu anymore ;-)&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; Make sure that libv4l-dev is installed.&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; Cheers,&lt;br /&gt;&amp;gt;&lt;br /&gt;&amp;gt; Markus&lt;br /&gt;&lt;br /&gt;ということでファイルは↓にあります。&lt;br /&gt;&lt;a href="https://code.ros.org/trac/opencv/raw-attachment/ticket/937/v4l_2.6.38.patch"&gt;https://code.ros.org/trac/opencv/raw-attachment/ticket/937/v4l_2.6.38.patch&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;0) $ sudo apt-get install libv4l-dev&lt;/div&gt;&lt;br /&gt;1) roscd opencv2&lt;br /&gt;2） cp v4l_2.6.38.patch .&lt;br /&gt;3）↑のメールのとおり、Makefileを以下のように修正。&lt;br /&gt;SVN_PATCH = pythontest.patch v4l_2.6.38.patch&lt;br /&gt;4) $ make&lt;br /&gt;&lt;div&gt;としたら成功しました。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-7298070191780090202?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/7298070191780090202/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/05/ubuntu-1104-natty-narwhalopencv2make.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/7298070191780090202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/7298070191780090202'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/05/ubuntu-1104-natty-narwhalopencv2make.html' title='Ubuntu 11.04 natty narwhalでのopencv2パッケージのmake'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-8486581176486485569</id><published>2011-04-30T16:43:00.000+09:00</published><updated>2011-04-30T16:43:16.218+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubuntu'/><title type='text'>Ubuntu 11.04 natty narwhal</title><content type='html'>Ubuntu定期リリースの2011年４月バージョン11.04 natty narwhal (粋なイッカク）がでました。&lt;br /&gt;&lt;br /&gt;さっそくインストールしてみました。&lt;br /&gt;&lt;br /&gt;Google日本語入力がおかしくなった以外はちゃんとうごいていますね。&lt;br /&gt;（とりあえずanthyにしています）&lt;br /&gt;&lt;br /&gt;rosはaptでいれていたので当然動かなくなりました。&lt;br /&gt;&lt;br /&gt;なのでソースからいれ直してみました。&lt;br /&gt;↓を参照するとできると思います。&lt;br /&gt;&lt;a href="http://www.ros.org/wiki/diamondback/Installation/Ubuntu/Source"&gt;http://www.ros.org/wiki/diamondback/Installation/Ubuntu/Source&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;非力なマシンなのでめっちゃ時間かかりましたが、いちおうrvizまで動くようになりました。&lt;br /&gt;左のツールバーが特徴ですね。&lt;br /&gt;そのうちROSもサポートするとは思いますが、LTSじゃないので、アップグレードは慎重に。。。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/6b81eb1d2d0e93a6d2f679f28f2bc5a8.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="232" src="http://gyazo.com/6b81eb1d2d0e93a6d2f679f28f2bc5a8.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-8486581176486485569?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/8486581176486485569/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/04/ubuntu-1104-natty-narwhal.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/8486581176486485569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/8486581176486485569'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/04/ubuntu-1104-natty-narwhal.html' title='Ubuntu 11.04 natty narwhal'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-3914294804144300568</id><published>2011-04-27T23:08:00.001+09:00</published><updated>2011-04-27T23:24:43.847+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='雑談'/><title type='text'>雑談：人間のステレオ視について</title><content type='html'>今日は雑談です。&lt;br /&gt;&lt;br /&gt;Kinectのおかげで最近は手軽に物体の３次元位置を取得できるようになりつつありますが、&lt;br /&gt;ロボット界では２つのカメラを使ったスレテオ視というのがむか〜しから研究されています。&lt;br /&gt;&lt;br /&gt;これは人間の両眼を模擬したシステムですよね。&lt;br /&gt;&lt;br /&gt;でも私は常日頃、片目でも物の奥行きとか分かるわけで、人間はそんなにスレテオ視を利用していないんじゃないかなぁ。記憶とか、常識とか、そういうもので奥行きを判断しているんじゃないかなぁ、と思っていました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;で、先日、私事ですが、右目の角膜が一部剥がれてしまい、右目の視力が０．０１くらいまで低下し、１週間ほど眼帯をしていました。&lt;br /&gt;今はほとんど治りましたのでご心配なく。&lt;br /&gt;&lt;br /&gt;で、片目で生活していたのですが、結構不自由する場面があったのです。&lt;br /&gt;それは手に持った何かと何かの位置合わせをする時です。&lt;br /&gt;&lt;br /&gt;手と手、手と体とかなら問題ないのですが、&lt;br /&gt;手に持った何かと、何か、の位置合わせが片目だと全くできませんでした。&lt;br /&gt;手と物体、でもなんとかなります。タイピングも問題ない。&lt;br /&gt;&lt;br /&gt;でも手にもった何かをどこかに作用させる（包丁で何かを切る、目薬の蓋をもどす）動作になると極端に精度が落ちるのです。&lt;br /&gt;&lt;br /&gt;一方で遠距離のものに関してはほとんど支障がありませんでした。&lt;br /&gt;っていうか、手が届かないからあたりまえか。&lt;br /&gt;&lt;br /&gt;でもなんか自分的にはこれは大発見でした。&lt;br /&gt;&lt;br /&gt;人間は近距離のみステレオ視をしている！&lt;br /&gt;考えてみれば遠いところは視差がでにくいので当たり前ですが。&lt;br /&gt;&lt;br /&gt;だから、ロボットに必要なステレオ視は近距離だな〜ってなんか思いました。&lt;br /&gt;いや、実感したというべきか。。。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-3914294804144300568?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/3914294804144300568/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/04/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/3914294804144300568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/3914294804144300568'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/04/blog-post.html' title='雑談：人間のステレオ視について'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-7381331824954785237</id><published>2011-04-26T22:28:00.000+09:00</published><updated>2011-04-26T22:28:33.000+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROS Inside'/><title type='text'>roscppのPublisherの挙動を調べる</title><content type='html'>&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;一度だけメッセージをPublishしたい、というとき以下のようなコードを書くと思います。&lt;br /&gt;これが下のコメントアウトしてあるsleep部分がないとうまくpublishされません。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;#include &amp;lt;ros/ros.h&amp;gt;&lt;br /&gt;#include &amp;lt;std_msgs/Int32.h&amp;gt;&lt;br /&gt;&lt;br /&gt;int main(int argc, char* argv[]) {&lt;br /&gt;&amp;nbsp;&amp;nbsp;ros::init(argc, argv, "pubtest");&lt;br /&gt;&amp;nbsp;&amp;nbsp;ros::NodeHandle node;&lt;br /&gt;&amp;nbsp;&amp;nbsp;ros::Publisher pub = node.advertise&amp;lt;std_msgs::Int32&amp;gt;("hoge", 1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;// sleep(1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;std_msgs::Int32 msg;&lt;br /&gt;&amp;nbsp;&amp;nbsp;msg.data = 1;&lt;br /&gt;&amp;nbsp;&amp;nbsp;pub.publish(msg);&lt;br /&gt;&amp;nbsp;&amp;nbsp;// sleep(1);&lt;br /&gt;&amp;nbsp;&amp;nbsp;return 0;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;&lt;br /&gt;何が起きているのか調べてみます。&lt;br /&gt;advertiseした時点でmasterとのコネクションが確立され、publishが終わった時点でmasterとの通信が終わっているつもりになっていましたが、違うようです。&lt;br /&gt;&lt;br /&gt;ということは実際にデータを送信するスレッドがいる、ということになりますね。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;どの時点でそのスレッドは作られているんでしょうか？&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;たしかrospyはそんな仕様だったきがしますが、roscppもそうだったんですね。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;後のsleepがないと動かないのは、そのスレッドが動く前にプログラムが終わってしまうからでしょう。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;最初のsleepがないと動かない、ということはやはりPublisherが作られたときにスレッドが作られているんでしょう。Publisherごとにスレッドが作られているんでしょうか？&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;&lt;br /&gt;ソースを追いかけてみるとpoll_managerというのがinit時に作られていて、そいつがスレッドを持っているので、&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;そこにpublishキューを処理するコールバックを登録するみたいですね。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;このスレッドはros::init時に作られているもよう。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;じゃあ、なぜ最初のsleepが必要なんでしょうか？&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;以下のように getNumSubscribers()してみると少しわかります。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;rostopic echo /hoge&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;している状態で、&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif; font-size: 15px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;sleepすると1で、sleepしないと0。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="color: #333333; font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;#include &amp;lt;ros/ros.h&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;#include &amp;lt;std_msgs/Int32.h&amp;gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;int main(int argc, char* argv[]) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;ros::init(argc, argv, "pubtest");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;ros::NodeHandle node;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;ros::Publisher pub = node.advertise&amp;lt;std_msgs::Int32&amp;gt;("hoge", 0);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;sleep(1);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;if (pub) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ROS_INFO("num:%d", pub.getNumSubscribers());&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;std_msgs::Int32 msg;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;msg.data = 1;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;pub.publish(msg);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;sleep(1);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;return 0;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333; font-size: 15px; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333; font-size: 15px; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;今度は以下のようにすると2になります。&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333; font-size: 15px; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;同一プロセス内だとadvertiseした瞬間につながるみたいです。&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;int main(int argc, char* argv[]) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;ros::init(argc, argv, "pubtest");&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;ros::NodeHandle node;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;&amp;nbsp;&amp;nbsp;ros::Subscriber sub = node.subscribe&amp;lt;std_msgs::Int32&amp;gt;("hoge", 1, hoge);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;ros::Publisher pub = node.advertise&amp;lt;std_msgs::Int32&amp;gt;("hoge", 1);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;sleep(1);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;if (pub) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ROS_INFO("num:%d", pub.getNumSubscribers());&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;std_msgs::Int32 msg;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;msg.data = 1;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;pub.publish(msg);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;sleep(1);&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;return 0;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333; font-size: 15px; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333; font-size: 15px; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;ということで、(プロセス外の)subscriberとのリンクも別スレッドで行われているから、でした。&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333; font-size: 15px; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333; font-size: 15px; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;つまり、最初のsleepはsubscriberとのリンク待ち、２つ目はpublish待ちのsleepということでした。&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333; font-size: 15px; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333; font-size: 15px; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;ちなみに今回の場合は以下のようにlatchedにするとsleepは１回で済みますね。&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333; font-size: 15px; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;int main(int argc, char* argv[]) {&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;ros::init(argc, argv, "pubtest");&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;ros::NodeHandle node;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&amp;nbsp;&amp;nbsp;ros::Publisher pub = node.advertise&amp;lt;std_msgs::Int32&amp;gt;("hoge", 1, &lt;/span&gt;&lt;span class="Apple-style-span" style="color: red;"&gt;true&lt;/span&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;std_msgs::Int32 msg;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;msg.data = 1;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;pub.publish(msg);&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="color: #333333; font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;sleep(1);&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="color: #333333; font-size: 15px; line-height: 20px;"&gt;&amp;nbsp; if (pub) {&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;ROS_INFO("hoge:%d", pub.getNumSubscribers());&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;&amp;nbsp;&amp;nbsp;return 0;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;span class="Apple-style-span" style="color: #333333;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; line-height: 20px;"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="color: #333333; font-size: 15px; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style="color: #333333; font-size: 15px; line-height: 20px;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt;以上すごい適当に調べた結果メモでした〜。間違っていたら教えてください。&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Arial, Tahoma, Helvetica, FreeSans, sans-serif;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-7381331824954785237?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/7381331824954785237/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/04/roscpppublisher.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/7381331824954785237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/7381331824954785237'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/04/roscpppublisher.html' title='roscppのPublisherの挙動を調べる'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-6623338460093890524</id><published>2011-04-20T18:32:00.000+09:00</published><updated>2011-04-20T18:32:12.614+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>RGBDSlamを試す</title><content type='html'>KinectでSLAM(地図作成）を行うRGBSlamを試してみます。&lt;br /&gt;作ったのはgmappingなどで有名なフライブルグ大学です。&lt;br /&gt;色付きの３次元マップができるはずです。&lt;br /&gt;&lt;br /&gt;まずはROSはdiamondbackのバージョンを利用していることを確かめましょう。&lt;br /&gt;&lt;blockquote&gt;$ echo $ROS_ROOT&lt;/blockquote&gt;&lt;blockquote&gt;/opt/ros/diamondback/ros&lt;/blockquote&gt;になっているでしょうか？&lt;br /&gt;&lt;br /&gt;なっていなければdiamondbackをインストールしましょう。&lt;br /&gt;&lt;a href="http://www.ros.org/wiki/diamondback/Installation/Ubuntu"&gt;http://www.ros.org/wiki/diamondback/Installation/Ubuntu&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;↓などを参考にしてもよいです。&lt;/div&gt;&lt;br /&gt;&lt;a href="http://ros-robot.blogspot.com/2011/03/diamondback.html"&gt;http://ros-robot.blogspot.com/2011/03/diamondback.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;で、次に必要なパッケージをaptでインストールします。&lt;br /&gt;&lt;blockquote&gt;$ sudo apt-get update&lt;/blockquote&gt;&lt;blockquote&gt;$ sudo apt-get install ros-diamondback-desktop-full ros-diamondback-perception-pcl-addons ros-diamondback-openni-kinect meshlab&lt;/blockquote&gt;~/rosにROS_PACKAGE_PATHが通っているなら、以下のようにします。&lt;br /&gt;&lt;blockquote&gt;$ cd ros&lt;/blockquote&gt;&lt;blockquote&gt;$ svn co http://alufr-ros-pkg.googlecode.com/svn/trunk/freiburg_tools/hogman_minimal&lt;/blockquote&gt;&lt;blockquote&gt;$ svn co https://svn.openslam.org/data/svn/rgbdslam/trunk rgbdslam&lt;/blockquote&gt;&lt;blockquote&gt;$ roscd rgbdslam &amp;amp;&amp;amp; rosmake --rosdep-install rgbdslamam&lt;/blockquote&gt;途中httpsの証明書の警告がでますが、気にせずpでインストールしました。&lt;br /&gt;perception_pclとかを個別にインストールしていた人は削除してdiamondbackのものを使いましょう。&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;ちなみに以下も必要ですね。&lt;/div&gt;&lt;blockquote&gt;$ sudo apt-get install libgsl0-dev&lt;/blockquote&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;ところで最初にインストールしたmeshlabってよさそうですね。ライセンスはGPL。&lt;br /&gt;&lt;a href="http://meshlab.sourceforge.net/"&gt;http://meshlab.sourceforge.net&lt;/a&gt;&lt;br /&gt;ポイントクラウドからメッシュ作ったりできるみたいです。&lt;br /&gt;ポリゴンリダクションはできないのかな。&lt;br /&gt;&lt;br /&gt;では実行しましょう。Kinectを差して、&lt;br /&gt;&lt;blockquote&gt;$ roslaunch openni_camera openni_node.launch&lt;/blockquote&gt;&lt;blockquote&gt;$ roslaunch rgbdslam rgbdslam.launch&lt;/blockquote&gt;すると以下のような画面がでますので、スペースでスタートです。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/7640f912551a952513d80f75f199db73.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="277" src="http://gyazo.com/7640f912551a952513d80f75f199db73.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;ゆっくりkinectを動かしていくと・・・&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/386b183d402e7d78ad9dfdebf1a74dfd.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="277" src="http://gyazo.com/386b183d402e7d78ad9dfdebf1a74dfd.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;じょじょにマップが構成されていきます。&lt;br /&gt;熊ちゃんがちょっとダブっちゃってます。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/ee412cbeacd66720aa95138af192ff69.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="277" src="http://gyazo.com/ee412cbeacd66720aa95138af192ff69.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;またスペースを押すと終了です。&lt;br /&gt;Graph-&amp;gt;Send Modelするとrvizにできたモデルが表示されます。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/4457e8219d2ced1da64e853be01d9852.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="294" src="http://gyazo.com/4457e8219d2ced1da64e853be01d9852.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;私の環境(MacbookPro Core2Duo 2.8GHz)ではちょっと動作が遅すぎたためか、&lt;br /&gt;机の足などがダブってしまいました。&lt;br /&gt;もっとゆっくりKinectを動かせばちゃんとできるのかもしれません。&lt;br /&gt;&lt;br /&gt;もしくは、もっと早いPC環境ではもっとちゃんとできるかな。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-6623338460093890524?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/6623338460093890524/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/04/rgbdslam.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6623338460093890524'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6623338460093890524'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/04/rgbdslam.html' title='RGBDSlamを試す'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-1086439174887456240</id><published>2011-04-15T21:09:00.000+09:00</published><updated>2011-04-15T21:09:02.646+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bash'/><title type='text'>bashの補完機能を試す(rosbashの中身を見てみる)</title><content type='html'>roscdやrostopicを初めて使ったとき、その補完機能にびっくりした人は私だけじゃないはず。&lt;br /&gt;今回はこの補完機能に迫ります。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;$ roscd rosbash&lt;br /&gt;&lt;/blockquote&gt;して、そのなかのrosbashというファイルを見てみます。&lt;br /&gt;&lt;br /&gt;ここにはいろいろ書いてありますが以下に注目しました。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;function _roscomplete {&lt;br /&gt;local arg opts&lt;br /&gt;COMPREPLY=()&lt;br /&gt;arg="${COMP_WORDS[COMP_CWORD]}"&lt;br /&gt;opts="`_ros_list_packages` `_ros_list_stacks`"&lt;br /&gt;IFS=$'\n'&lt;br /&gt;COMPREPLY=($(compgen -W "${opts}" -- ${arg}))&lt;br /&gt;unset IFS&lt;br /&gt;}&lt;br /&gt;complete -F "_roscomplete" "rosmake"&lt;br /&gt;&lt;/blockquote&gt;&lt;blockquote&gt;$ man bash&lt;br /&gt;&lt;/blockquote&gt;として、compgenを検索するとこの使い方が書いてありました。&lt;br /&gt;上記の例ではrosmakeというコマンドの引数の補完として、_roscomplete関数を用いる。&lt;br /&gt;そして、${opts}変数に入っている文字列をIFS変数を区切り文字として使って、&lt;br /&gt;現在入力中の${arg}を補完する。という意味になるみたいです。-Wはwordの意味。&lt;br /&gt;-Wを-Gにすると正規表現も使えるみたいです。&lt;br /&gt;&lt;br /&gt;試しに以下のようなファイルを作ってみました。&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;_hoge()&lt;br /&gt;{&lt;br /&gt;local arg&lt;br /&gt;COMPREPLY=()&lt;br /&gt;arg=${COMP_WORDS[COMP_CWORD]}&lt;br /&gt;COMPREPLY=($(compgen -W 'hokan1 hokan2 kouho1 kouho2' -- $arg))&lt;br /&gt;}&lt;br /&gt;complete -F _hoge hoge&lt;br /&gt;&lt;br /&gt;_hoga()&lt;br /&gt;{&lt;br /&gt;local arg&lt;br /&gt;COMPREPLY=()&lt;br /&gt;arg=${COMP_WORDS[COMP_CWORD]}&lt;br /&gt;COMPREPLY=($(compgen -o dirnames -- $arg))&lt;br /&gt;}&lt;br /&gt;complete -F _hoga hoga&lt;br /&gt;&lt;br /&gt;_hogi()&lt;br /&gt;{&lt;br /&gt;local arg&lt;br /&gt;COMPREPLY=()&lt;br /&gt;arg=${COMP_WORDS[COMP_CWORD]}&lt;br /&gt;COMPREPLY=($(compgen -G "${arg}*.txt" -- $arg))&lt;br /&gt;}&lt;br /&gt;complete -F _hogi hogi&lt;br /&gt;&lt;/blockquote&gt;これをhoge.sh&lt;br /&gt;として保存して、&lt;br /&gt;&lt;blockquote&gt;$ source hoge.sh&lt;br /&gt;&lt;/blockquote&gt;すると&lt;br /&gt;hogeに対してhokan1 hokan2 kouho1 kouho2が、&lt;br /&gt;hogaに対してはディレクトリが、&lt;br /&gt;hogiに対しては*.txtファイルが、&lt;br /&gt;それぞれ出てきます。&lt;br /&gt;&lt;br /&gt;これでプログラムの補完ができたら、ちょっとおしゃれですね。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-1086439174887456240?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/1086439174887456240/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/04/bashrosbash.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/1086439174887456240'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/1086439174887456240'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/04/bashrosbash.html' title='bashの補完機能を試す(rosbashの中身を見てみる)'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-4592107792510733911</id><published>2011-04-14T22:48:00.000+09:00</published><updated>2011-04-14T22:48:17.335+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='rospy'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>rospython</title><content type='html'>rospythonというコマンドをご存知でしょうか？&lt;br /&gt;&lt;br /&gt;rospyを使うためには&lt;br /&gt;&lt;blockquote&gt;import roslib&lt;br /&gt;roslib.load_manifest('hogehoge')&lt;br /&gt;&lt;/blockquote&gt;とするのがお決まりです。&lt;br /&gt;こうするとmanifest.xmlに書いてあるdependパッケージにPYTHONPATHが通るようになり、&lt;br /&gt;依存パッケージを呼び出すことができる。&lt;br /&gt;&lt;br /&gt;例えばmanifest.xmlに&lt;br /&gt;&lt;blockquote&gt;  ＜depend package="joy"/＞&lt;br /&gt;&lt;/blockquote&gt;と書いてあるパッケージhogehogeがあったとして、&lt;br /&gt;&lt;br /&gt;通常Pythonから使うには&lt;br /&gt;&lt;blockquote&gt;$ python&lt;br /&gt;&gt;&gt;&gt; import roslib&lt;br /&gt;&gt;&gt;&gt; roslib.load_manifest('hogehoge')&lt;br /&gt;&gt;&gt;&gt; import joy&lt;br /&gt;&lt;/blockquote&gt;としないといけない。&lt;br /&gt;&lt;br /&gt;rospythonはこれを簡単に使うためのもので、&lt;br /&gt;&lt;blockquote&gt;$ rospython hogehoge&lt;br /&gt;&gt;&gt;&gt; import joy&lt;br /&gt;&lt;/blockquote&gt;と、いきなりdependパッケージを使うことができる。&lt;br /&gt;ちょっと便利？&lt;br /&gt;&lt;br /&gt;今のところroshにはこの機能はないみたいです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-4592107792510733911?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/4592107792510733911/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/04/rospython.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/4592107792510733911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/4592107792510733911'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/04/rospython.html' title='rospython'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-6936965043304796197</id><published>2011-04-10T00:11:00.004+09:00</published><updated>2011-04-10T00:25:54.868+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Robot'/><category scheme='http://www.blogger.com/atom/ns#' term='TurtleBot'/><title type='text'>TurtleBotの持つ意味</title><content type='html'>Willow GarageからTurtleBotという新しいロボットが発表されました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.willowgarage.com/turtlebot"&gt;http://www.willowgarage.com/turtlebot&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;紹介動画はこちら&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="349" src="http://www.youtube.com/embed/MOEjL8JDvd0" title="YouTube video player" width="425"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;PR2と比べちゃうとちょっと、、、、&lt;br /&gt;という感じがしますね。&lt;br /&gt;&lt;br /&gt;しかしWillowのrobot紹介ページでは、テレプレゼンスロボットのTexaiより上にあります。&lt;br /&gt;PR2, TurtleBot, Texaiの順。&lt;br /&gt;ここからもWillowのやる気をちょっと感じます。&lt;br /&gt;&lt;a href="http://www.willowgarage.com/robots"&gt;http://www.willowgarage.com/robots&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;TurtleBotはiRobotのCreateというルンバの掃除機抜きバージョン（日本では未発売）＋Kinect+Netbookという構成で、自律移動ができます。&lt;br /&gt;僕の以前作ったロボットにちょっと似てませんかね。&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen="" frameborder="0" height="349" src="http://www.youtube.com/embed/a7wikoB0K0c" title="YouTube video player" width="425"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;この亀ロボットが持つ意味は実は大きいと思います。&lt;br /&gt;Createは確か２万円くらい、Kinectは1.5万くらい、Netbookは数万、これに特注フレームを合わせても１０万くらいでしょうか。&lt;br /&gt;ということは普通のPCと同じかそれより安いくらいです。&lt;br /&gt;&lt;br /&gt;WillowがやりたいのはROSにより誰でもロボットのプログラムが簡単に作れる世界の実現だと思います。今のPCのように。&lt;br /&gt;しかしそれには誰でもロボットを持っていないといけない。でもロボットは誰でも持てるわけじゃない。高いし、作るにはある程度のメカ、電気の技術が必要。&lt;br /&gt;そこでまず彼らがやったのはPR2を配ること。でもPR2は高すぎて(4000万円！）一般人には手がでない。&lt;br /&gt;ROSとそのコミュニティのおかげでソフトはかなり揃ってきたけど、開発者の裾野はそこまで広がりきってはいない。&lt;br /&gt;ハードウェアの壁は大きい。&lt;br /&gt;&lt;br /&gt;シミュレータ上でPR2のプログラムも作れるけど、結局シミュレータでしか動かないならゲームのエージェントでも作ったほうが楽しい。やっぱりロボットの面白さは目の前で物理エージェントが動くことじゃないでしょうか。&lt;br /&gt;&lt;br /&gt;そこでこのTurtleBotです。&lt;br /&gt;このロボットなら誰でも、PCより安い値段で手に入れることができる。&lt;br /&gt;しかも３Dセンサと、自律移動のソフトも付いている。&lt;br /&gt;ロボットの知識がなくても誰でもロボットプログラミングができる時代がついに来たのです。&lt;br /&gt;なのでTurtleBotは今までのWillowのロボットの中でもかなり革命的だと思います。&lt;br /&gt;ロボットとしては普通だけど、そのもたらす意味は革命だと思うわけです。&lt;br /&gt;&lt;br /&gt;ROSは自律移動、画像処理系のソフトが充実しているというイメージを僕は持っています。&lt;br /&gt;なのでTurtleBotはROSとの相性もいいんじゃないでしょうか？&lt;br /&gt;&lt;br /&gt;あとはマニピュレーション系をどうするかです。&lt;br /&gt;６軸以上はないと満足なマニピュレーションはできないと思います。&lt;br /&gt;つまりモータが６個以上ということで、ルンバよりさらに高価になります。&lt;br /&gt;このマニピュレーションが可能なロボットが安価に手に入るようになったとき、&lt;br /&gt;ロボット界には真の革命が起きるでしょう。&lt;br /&gt;そこを狙っている人たちもきっといるでしょう。&lt;br /&gt;&lt;br /&gt;なんて勝手な想像をしてみました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-6936965043304796197?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/6936965043304796197/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/04/turtlebot.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6936965043304796197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6936965043304796197'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/04/turtlebot.html' title='TurtleBotの持つ意味'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://img.youtube.com/vi/MOEjL8JDvd0/default.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-5277734691098281581</id><published>2011-03-28T23:24:00.001+09:00</published><updated>2011-03-28T23:24:47.427+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><category scheme='http://www.blogger.com/atom/ns#' term='rosh'/><title type='text'>roshを使ってみる</title><content type='html'>みなさん震災の影響はどうでしょうか？&lt;br /&gt;私のところはほとんど影響はありませんでした。&lt;br /&gt;では前回の続きでroshです。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ros.org/wiki/rosh"&gt;http://www.ros.org/wiki/rosh&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;roshはPythonインタプリタからROSにアクセスするための便利ツールです。&lt;br /&gt;私の経験上、ロボットとインタプリタの相性は抜群だと思いますので、&lt;br /&gt;これはかなりいい予感がします。&lt;br /&gt;（作者は予想通りKen Conleyさんですね）&lt;br /&gt;&lt;br /&gt;個人的にはPythonのインタプリタはあまり好きではありません。(っていうほど使ったことないですけど)&lt;br /&gt;roshもデフォルトのインタプリタではなく、IPythonというものを使っているようです。&lt;br /&gt;(IPythonではtabの補完ができたり、デバッグにも使えるみたいです。&lt;br /&gt;emacsキーバインドも使えるし、これはすごいです！！Python使いには常識？）&lt;br /&gt;&lt;br /&gt;まずroshのインストールです。&lt;br /&gt;desktop-fullでインストールしてもroshは入らないようです。&lt;br /&gt;&lt;br /&gt;$ sudo apt-get install ros-diamondback-rosh-desktop-plugins&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;IPythonが初めての人は&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&amp;nbsp;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 15px;"&gt;&lt;tt class="backtick"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;~/.ipython/ipythonrcの以下の部分を２にセットします。（プライベートシンボルを補完しないように）&lt;/span&gt;&lt;/tt&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="line862" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;span class="anchor" id="line-19"&gt;&lt;/span&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;readline_omit__names 2&lt;/span&gt;&lt;/pre&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;span class="anchor" id="line-20"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;span class="anchor" id="line-21"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;カスタマイズしたい人はroshrcを書くこともできます。&lt;br /&gt;&lt;a href="http://www.ros.org/wiki/rosh/roshrc"&gt;http://www.ros.org/wiki/rosh/roshrc&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;私は以下のようにして動作確認しました。&lt;br /&gt;&lt;br /&gt;予め、自作のjtalk_node、/talk　（std_msgs/String）をSubscribeするノードを動かしておきます。&lt;br /&gt;$ rostopic list&lt;br /&gt;/rosout&lt;br /&gt;/rosout_agg&lt;br /&gt;/talk&lt;br /&gt;という状態です。&lt;br /&gt;&lt;br /&gt;$ rosrun rosh rosh&lt;br /&gt;で起動します。&lt;br /&gt;&lt;br /&gt;ここで、&lt;br /&gt;topics.&lt;br /&gt;まで入力して、Tabを押すと&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;In [1]: topics.&lt;br /&gt;topics.rosout &amp;nbsp; &amp;nbsp; &amp;nbsp;topics.rosout_agg &amp;nbsp;topics.talk &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;とトピック一覧が表示されます。&lt;/div&gt;&lt;div&gt;で、&lt;/div&gt;&lt;div&gt;tをタイプしてTabすると補完されて、&lt;/div&gt;&lt;div&gt;&lt;div&gt;In [1]: topics.talk&lt;/div&gt;&lt;/div&gt;&lt;div&gt;となります。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;topics.talk[0]&lt;/div&gt;&lt;div&gt;とすれば最新の/talkが見れます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;topics.talk(data="hoge")&lt;/div&gt;&lt;div&gt;とすれば、/talkに大して、std_msgs/Stringのstring dataに"hoge"をいれたものを発行できます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;これはすごい便利な予感がしますね。&lt;/div&gt;&lt;div&gt;rostopicでは物足りないときはこれですね。っていうかrostopicいらない？&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-5277734691098281581?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/5277734691098281581/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/03/rosh.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/5277734691098281581'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/5277734691098281581'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/03/rosh.html' title='roshを使ってみる'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-1845565139834573085</id><published>2011-03-10T21:44:00.000+09:00</published><updated>2011-03-10T21:44:09.195+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>Diamondbackのインストール</title><content type='html'>先日ROSの新しいバージョン Diamondbackがリリースされました。&lt;br /&gt;&lt;br /&gt;さっそくインストールしてみます。&lt;br /&gt;&lt;br /&gt;すでにROSのリポジトリをaptにいれている人は、&lt;br /&gt;&lt;br /&gt;$ sudo apt-get update&lt;br /&gt;$ sudo apt-get install ros-diamondback-desktop-full&lt;br /&gt;とするととりあえず必要なものが全部入ります。&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;全部は入れたくないけどrx, rvizなど、ROS+便利ツールを使いたい人は、&lt;/span&gt;&lt;br /&gt;$&amp;nbsp;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;sudo apt-get install ros-diamondback-desktop&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;ROSそのものだけを使いたい人は&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;$ sudo apt-get install ros-diamondback-ros-base&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;とすると必要なものが入ります。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;/span&gt;&lt;br /&gt;&lt;div&gt;私はdesktop-fullにしました。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;あとはいつも通り、環境変数をセットするために、&lt;/div&gt;&lt;div&gt;source /opt/ros/diamondback/setup.bash&lt;/div&gt;&lt;div&gt;を.bashrcに追加します。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;以上です。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$ rosls common_msgs&lt;/div&gt;&lt;div&gt;してみると、&lt;/div&gt;&lt;div&gt;trajectory_msgs&lt;/div&gt;&lt;div&gt;などが追加されていますね。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;diamondbackではPCL関連のアップデートが一番アツいと思いますが、&lt;/div&gt;&lt;div&gt;個人的に最も興味があるのは&lt;a href="http://www.ros.org/wiki/rosh"&gt;rosh&lt;/a&gt;です。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-1845565139834573085?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/1845565139834573085/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/03/diamondback.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/1845565139834573085'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/1845565139834573085'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/03/diamondback.html' title='Diamondbackのインストール'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-1777028315596434527</id><published>2011-03-09T22:09:00.000+09:00</published><updated>2011-03-09T22:09:03.420+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>Robot Sound Libraries</title><content type='html'>ロボットがどんな声を発するべきか。&lt;br /&gt;&lt;br /&gt;日本ではいわゆる「ゆっくり」ボイスで決まり？な訳ですが、&lt;br /&gt;海外ではそうはいきません。&lt;br /&gt;&lt;br /&gt;Willowがロボット用音声を提供してくれました。&lt;br /&gt;&lt;br /&gt;http://hri.willowgarage.com/sounds/&lt;br /&gt;&lt;br /&gt;WEBページで直接聞けるのでいろいろ試してみてください。&lt;br /&gt;みなさん、どれがお好みですか？&lt;br /&gt;&lt;br /&gt;人っぽいものから、単なる音までいろいろ揃っています。&lt;br /&gt;こういったロボット用コンテンツを共有するという、非常に面白い試みだと思います。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-1777028315596434527?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/1777028315596434527/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/03/robot-sound-libraries.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/1777028315596434527'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/1777028315596434527'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/03/robot-sound-libraries.html' title='Robot Sound Libraries'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-7155891056436060229</id><published>2011-02-08T22:49:00.000+09:00</published><updated>2011-02-08T22:49:10.387+09:00</updated><title type='text'>ハンズフリー掃除機</title><content type='html'>ニコニコにもアップしてみました。&lt;br /&gt;&lt;br /&gt;ちゃんとこっちの意図通りのツッコミが入っていて、面白いですね。&lt;br /&gt;ニコニコもいいなぁ。&lt;br /&gt;&lt;script src="http://ext.nicovideo.jp/thumb_watch/sm13450858" type="text/javascript"&gt;&lt;/script&gt;&lt;noscript&gt;&lt;a href="http://www.nicovideo.jp/watch/sm13450858"&gt;【ニコニコ動画】ハンズフリー掃除機作ってみた&lt;/a&gt;&lt;/noscript&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-7155891056436060229?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/7155891056436060229/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/02/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/7155891056436060229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/7155891056436060229'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/02/blog-post.html' title='ハンズフリー掃除機'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-8297658810941820997</id><published>2011-01-30T14:31:00.001+09:00</published><updated>2011-01-30T14:35:50.423+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kinect'/><category scheme='http://www.blogger.com/atom/ns#' term='Roomba'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>Kinectを使ったジェスチャ認識でルンバを操縦する</title><content type='html'>Kinectでルンバを操縦してみました。&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ハードウェア接続は&lt;/div&gt;&lt;div&gt;Kinect =USB=&amp;gt; PC =Bluetooth=&amp;gt; Roomba&lt;/div&gt;&lt;div&gt;という感じです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/Dxzoomerowo/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/Dxzoomerowo?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266" src="http://www.youtube.com/v/Dxzoomerowo?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;openni_trackerというパッケージを使ってtfのボーンを作り、&lt;/div&gt;&lt;div&gt;tfのデータから腰と手先位置の差分をとって似非ジェスチャ認識させています。&lt;/div&gt;&lt;div&gt;Kinectの目の前にいないと操縦できないのがいまいちですね。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ソースも適当ですが、&lt;/div&gt;&lt;div&gt;一応otl_niスタックとして上げました。&lt;/div&gt;&lt;div&gt;むちゃくちゃ簡単でした。&lt;br /&gt;&lt;br /&gt;ルンバのBluetoothモジュールは@longjie0723 のFRISK Roombaを使っています。&lt;br /&gt;&lt;a href="http://orientalrobotics.blogspot.com/2011/01/friskroomba.html"&gt;http://orientalrobotics.blogspot.com/2011/01/friskroomba.html&lt;/a&gt;&lt;br /&gt;非常に快適です。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-8297658810941820997?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/8297658810941820997/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/01/kinect.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/8297658810941820997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/8297658810941820997'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/01/kinect.html' title='Kinectを使ったジェスチャ認識でルンバを操縦する'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-3741568383520718592</id><published>2011-01-29T23:32:00.000+09:00</published><updated>2011-01-29T23:32:29.422+09:00</updated><title type='text'>オリロボ</title><content type='html'>ROSと全く無関係ですが、ちょっといい本を見つけたので紹介します。&lt;br /&gt;&lt;br /&gt;その名もORIROBO。&lt;br /&gt;オリジナルロボットではなく、折り紙ロボットの本です。&lt;br /&gt;&lt;br /&gt;&lt;iframe frameborder="0" marginheight="0" marginwidth="0" scrolling="no" src="http://rcm-jp.amazon.co.jp/e/cm?lt1=_blank&amp;amp;bc1=FFFFFF&amp;amp;IS2=1&amp;amp;npa=1&amp;amp;bg1=FFFFFF&amp;amp;fc1=000000&amp;amp;lc1=0000FF&amp;amp;t=otofbl-22&amp;amp;o=9&amp;amp;p=8&amp;amp;l=as4&amp;amp;m=amazon&amp;amp;f=ifr&amp;amp;asins=4766213556" style="height: 240px; width: 120px;"&gt;&lt;/iframe&gt;&lt;br /&gt;&lt;br /&gt;かなり詳しく折り方が書いてあります。&lt;br /&gt;&lt;br /&gt;さっそく折ってみました！&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://4.bp.blogspot.com/_RCciaOESQtI/TUQkVnYvMsI/AAAAAAAAFHg/W3bX60RXwD8/s1600/image16.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://4.bp.blogspot.com/_RCciaOESQtI/TUQkVnYvMsI/AAAAAAAAFHg/W3bX60RXwD8/s320/image16.jpg" width="240" /&gt;&lt;/a&gt;&lt;/div&gt;かっちょえーー！&lt;br /&gt;３０分くらいかかりました。&lt;br /&gt;&lt;br /&gt;これを切り込みなしの１枚の紙で作れるというのが衝撃的でした。&lt;br /&gt;&lt;br /&gt;他にも武器とか、子供心をくすぐるアイテムがいくつも載っています。&lt;br /&gt;これはよい。&lt;br /&gt;&lt;br /&gt;安いサーボと組み合わせたらなんか面白いことできそうな予感がしました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-3741568383520718592?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/3741568383520718592/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/01/blog-post_29.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/3741568383520718592'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/3741568383520718592'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/01/blog-post_29.html' title='オリロボ'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_RCciaOESQtI/TUQkVnYvMsI/AAAAAAAAFHg/W3bX60RXwD8/s72-c/image16.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-5578475212350788198</id><published>2011-01-22T17:57:00.003+09:00</published><updated>2011-08-16T22:06:19.628+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Roomba'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>FRISK Roomba動作確認編</title><content type='html'>@longjie0723 さんにFRISK Roombaモジュールをいただきましたので、&lt;br /&gt;早速動作確認させていただきました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://orientalrobotics.blogspot.com/2011/01/friskroomba.html"&gt;http://orientalrobotics.blogspot.com/2011/01/friskroomba.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/M2yORZr2PN0/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/M2yORZr2PN0?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266" src="http://www.youtube.com/v/M2yORZr2PN0?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;当方ホストPCがUbuntu10.04、Roomba577での動作確認になります。&lt;br /&gt;&lt;br /&gt;まず、FRISKをうちのルンバにぶすっとさします。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://3.bp.blogspot.com/_RCciaOESQtI/TTqalHhPJgI/AAAAAAAAFHQ/AnFnX4ejXPc/s1600/CIMG0949.JPG" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="240" src="http://3.bp.blogspot.com/_RCciaOESQtI/TTqalHhPJgI/AAAAAAAAFHQ/AnFnX4ejXPc/s320/CIMG0949.JPG" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;この状態で以下のコマンドを打ちます。&lt;br /&gt;$ hcitool scan&lt;br /&gt;&lt;br /&gt;Scanning ...&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;00:01:95:09:06:0C&lt;span class="Apple-tab-span" style="white-space: pre;"&gt; &lt;/span&gt;Roomba-001&lt;br /&gt;&lt;div&gt;これでモジュールが正常起動していることと、MACアドレスが分かりました。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;/etc/bluetooth/rfcomm.conf&lt;br /&gt;を以下のように編集しました。&lt;br /&gt;&lt;br /&gt;rfcomm0 {&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Automatically bind the device at startup&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;bind yes;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Bluetooth address of the device&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;device 00:01:95:09:06:0C;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# RFCOMM channel for the connection&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;channel 1;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;# Description of the connection&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;comment "FRISK Roomba";&lt;br /&gt;}&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;deviceのところにさっき調べたMACアドレスを書きます。&lt;br /&gt;&lt;br /&gt;この状態で&lt;br /&gt;&lt;br /&gt;$ sudo /etc/init.d/bluetooth stop&lt;br /&gt;&lt;div&gt;&lt;div&gt;$ sudo /etc/init.d/bluetooth start&lt;/div&gt;&lt;/div&gt;&lt;div&gt;して、&lt;/div&gt;&lt;br /&gt;$ sudo rfcomm bind hci0&lt;br /&gt;とします。&lt;br /&gt;すると、&lt;br /&gt;/dev/rfcomm0&lt;br /&gt;というデバイスファイルができています。&lt;br /&gt;&lt;br /&gt;誰でも使えるようにパーミッションをだしておきましょう。&lt;br /&gt;$ sudo chmod 666 /dev/rfcomm0&lt;br /&gt;&lt;br /&gt;あとは、これをシリアルデバイスだと思ってプログラムを走らせればOK。&lt;br /&gt;&lt;br /&gt;$ sudo rfcomm bind hci0&lt;br /&gt;&lt;div&gt;は起動するたびに実行しないといけません。&lt;/div&gt;&lt;div&gt;/etc/rc.local&lt;/div&gt;&lt;div&gt;などにかきましょう。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ルンバ関係ないですが、PS3のジョイスティックが使えなくなっていたので、&lt;/div&gt;&lt;div&gt;/etc/init/bluetooth/main.conf&lt;/div&gt;&lt;div&gt;に&lt;/div&gt;&lt;div&gt;&lt;div&gt;DisablePlugins = input&lt;/div&gt;&lt;/div&gt;&lt;div&gt;としました。&lt;/div&gt;&lt;div&gt;ルンバとの共存は問題ないようです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;使ったプログラムは以前作ったものをそのまんまで動きました。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;object class="BLOGGER-youtube-video" classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0" data-thumbnail-src="http://i.ytimg.com/vi/e5DZYZKSNys/0.jpg" height="266" width="320"&gt;&lt;param name="movie" value="http://www.youtube.com/v/e5DZYZKSNys?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" /&gt;&lt;param name="bgcolor" value="#FFFFFF" /&gt;&lt;embed width="320" height="266" src="http://www.youtube.com/v/e5DZYZKSNys?f=user_uploads&amp;c=google-webdrive-0&amp;app=youtube_gdata" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;div&gt;無線化うれしい！&lt;br /&gt;とりえあず動作確認まで。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-5578475212350788198?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/5578475212350788198/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2011/01/frisk-roomba.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/5578475212350788198'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/5578475212350788198'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2011/01/frisk-roomba.html' title='FRISK Roomba動作確認編'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_RCciaOESQtI/TTqalHhPJgI/AAAAAAAAFHQ/AnFnX4ejXPc/s72-c/CIMG0949.JPG' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-3160998097048323963</id><published>2010-12-14T00:54:00.001+09:00</published><updated>2010-12-14T01:00:06.653+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kinect'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>ni (OpenNIのrosスタック)を試す。</title><content type='html'>OpenNIはKinectを利用する認識・デバイス操作ライブラリです。&lt;br /&gt;&lt;br /&gt;ROSからOpenNIを利用するには以下を参考にインストールしましょう。&lt;br /&gt;Ubuntu 10.04, cturtleを前提とします。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ros.org/wiki/ni"&gt;http://www.ros.org/wiki/ni&lt;/a&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;a href="http://www.ros.org/wiki/ni"&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;$ echo "- git: {local-name: ni, uri: 'https://github.com/ros-pkg-git/ni.git', version: master}" &amp;gt; /tmp/ni.ri&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;$ rosinstall ~/ni /opt/ros/cturtle /tmp/ni.ri&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;$ source ~/ni/setup.sh&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;$ rosmake ni --rosdep-install&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;$ &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;sudo cp `rospack find ps_engine`/install/55-primesense-usb.rules /etc/udev/rules.d/&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;そしてリブートしましょう。&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;これでインストール終了。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;試すには&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;$ roslaunch openni_camera openni_kinect.launch&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;$ rosrun rviz rviz&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;して、&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;Fixed FrameとTarget Frameを/openni_depthにして、&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;Point Cloud2として、&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;/camera/depth/points2を指定すると&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;rviz上で３D色付きイメージが見れます。ぐりぐり動かせます。&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/af86bbfb0e45482117befb3c3b54a365.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="184" src="http://gyazo.com/af86bbfb0e45482117befb3c3b54a365.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;&lt;br /&gt;人物抽出サンプルを実行するには&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; white-space: normal;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;export XN_SENSOR_VENDOR_ID=0x045E &lt;br /&gt;export XN_SENSOR_PRODUCT_ID=0x02AE&lt;br /&gt;export XN_HOST_PROTOCOL_ALGORITHM_REGISTRATION=0x40&lt;br /&gt;rosrun openni Sample-NiUserTracker&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;とします。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace; font-size: 15px; white-space: pre-wrap;"&gt;&lt;a href="http://www.ros.org/wiki/nite"&gt;http://www.ros.org/wiki/nite&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;のドキュメントには64bitのみ対応と書いてありますが、&lt;br /&gt;すでにソースはちゃんと対応してあるので、x86(32bit)でも普通に実行できます。&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/1L38787ScB4?hl=ja&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/1L38787ScB4?hl=ja&amp;fs=1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;動画はgtk-recordmydesktopですべてのフレームをキャプチャするオプションをONにしてとりました。&lt;br /&gt;エンコードは&lt;br /&gt;$ mencoder out.ogv -oac mp3lame -ovc lavc -lavcopts vcodec=mpeg4 -o output.mp4&lt;br /&gt;という感じ。&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: courier, monospace;"&gt; &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-3160998097048323963?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/3160998097048323963/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2010/12/ni-openniros.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/3160998097048323963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/3160998097048323963'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2010/12/ni-openniros.html' title='ni (OpenNIのrosスタック)を試す。'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-4685268291534904976</id><published>2010-12-04T22:38:00.000+09:00</published><updated>2010-12-04T22:38:50.607+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='pcl'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>pcl(unstable)のインストール</title><content type='html'>pcl (point cloud library)をインストールします。&lt;br /&gt;&lt;a href="http://www.ros.org/wiki/pcl"&gt;http://www.ros.org/wiki/pcl&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;pclは３Dのレーザーデータから物体認識するためのライブラリ（たぶん）です。&lt;br /&gt;これまでそんな３Dセンサ持っていないので関係ないと思っていましたが、&lt;br /&gt;Kinectのおかげでpclが使えそうな雰囲気がしてきたのでとりえあず触ってみたいと思います。&lt;br /&gt;&lt;br /&gt;私の環境ではROSはcturtleを利用していますが、いろんなところで&lt;br /&gt;cturtleのpclは古すぎて、APIも変わっているしオススメしない、という雰囲気を感じるので&lt;br /&gt;なるべく新しいものを入れたいと思います。&lt;br /&gt;&lt;br /&gt;pclを使っている@garaemonさんに聞いたところによると「まじunstableおすすめ」ということでしたので、&lt;br /&gt;いれてみます。&lt;br /&gt;&lt;br /&gt;以下のような記述をpcl.rosintallとして保存して、&lt;br /&gt;$ rosinstall ros pcl.rosinstall&lt;br /&gt;でソースを入手しました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;- svn:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uri: https://code.ros.org/svn/ros-pkg/stacks/perception_pcl/tags/unstable&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;local-name: perception_pcl&lt;br /&gt;- svn:&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;uri: https://code.ros.org/svn/ros-pkg/stacks/perception_pcl_addons/tags/unstable&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;local-name: perception_pcl_addons&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;ROS全部makeするのめんどくさかったので、ROS本体はcturtleのまま、&lt;/div&gt;&lt;div&gt;pclだけunstable版でやってみます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;環境変数ROS_PACKAGES_PATHのcturtleのほうより先に、このunstable版がくるようにして、&lt;/div&gt;&lt;div&gt;$ roscd pcl_tutorial&lt;/div&gt;&lt;div&gt;$ rosmake --rosdep-install&lt;/div&gt;&lt;div&gt;としてみました。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;試しに&lt;/div&gt;&lt;div&gt;$ roscd pcl_tutorial&lt;/div&gt;&lt;div&gt;$ cd data&lt;/div&gt;&lt;div&gt;$ ../bin/tutorial_narf_keypoint_extraction ./office_scene.pcd&lt;/div&gt;&lt;div&gt;としてみると、以下のようにnarf特徴点の抽出と表示ができたようです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/31cc4a10eec78d0baa9eb7645c9045da.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="233" src="http://gyazo.com/31cc4a10eec78d0baa9eb7645c9045da.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;早くKinectのデータで試してみたいですね。&lt;/div&gt;&lt;div&gt;Tutorialがあるので必要ありそうなところだけやってみたいと思います。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-4685268291534904976?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/4685268291534904976/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2010/12/pclunstable.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/4685268291534904976'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/4685268291534904976'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2010/12/pclunstable.html' title='pcl(unstable)のインストール'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-2828949184734764466</id><published>2010-11-22T21:51:00.000+09:00</published><updated>2010-11-22T21:51:43.460+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>joint_state_publisher</title><content type='html'>URDFのチュートリアルが追加されました。&lt;br /&gt;&lt;a href="http://www.ros.org/wiki/urdf/Tutorials"&gt;http://www.ros.org/wiki/urdf/Tutorials&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;h2 id="Learning_URDF_Step_by_Step" style="counter-reset: section 0; font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;2. Learning URDF Step by Step&lt;/h2&gt;&lt;div&gt;というやつです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;span class="anchor" id="line-5"&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="line867" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;/div&gt;&lt;div class="searchresults" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;ol&gt;&lt;/ol&gt;&lt;/div&gt;&lt;br /&gt;そこでなかなか便利なツールを見つけたので紹介します。&lt;br /&gt;joint_state_publisherです。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ros.org/wiki/joint_state_publisher"&gt;http://www.ros.org/wiki/joint_state_publisher&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;&lt;a href="http://www.ros.org/wiki/wu-ros-pkg" style="border-bottom-width: 0px; border-color: initial; border-left-width: 0px; border-right-width: 0px; border-style: initial; border-top-width: 0px; color: #2b7fcf;"&gt;wu-ros-pkg&lt;/a&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;からインストールしてください。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;URDFでロボットファイルを作るときに、GUIで&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;任意のロボット関節角度をPublishしてくれます。&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;↓みたいな感じです。&lt;/span&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://wu-ros-pkg.svn.sourceforge.net/svnroot/wu-ros-pkg/stacks/urdf_tools/trunk/joint_state_publisher/screenshot.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="https://wu-ros-pkg.svn.sourceforge.net/svnroot/wu-ros-pkg/stacks/urdf_tools/trunk/joint_state_publisher/screenshot.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif;"&gt;便利。&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-2828949184734764466?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/2828949184734764466/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2010/11/jointstatepublisher.html#comment-form' title='1 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/2828949184734764466'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/2828949184734764466'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2010/11/jointstatepublisher.html' title='joint_state_publisher'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-7552553737188881733</id><published>2010-11-21T12:32:00.000+09:00</published><updated>2010-11-21T12:32:10.175+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kinect'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>KinectをROSで使ってみる</title><content type='html'>Kinect１０分くらい前に１日遅れでやっと届きました。&lt;br /&gt;Amazon遅すぎです。。。&lt;br /&gt;&lt;br /&gt;でも入手１０分でデプスイメージまで取れました。&lt;br /&gt;世界のハッカーありがとう。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;黒いところは問題ない様子。透明部分は当然ながら取れない。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/b9b6c33407ad8e878a9d3b9146c960d5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="130" src="http://gyazo.com/b9b6c33407ad8e878a9d3b9146c960d5.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;近すぎると距離が取れない（白く抜けてしまっている）&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/1a39243fe1dbf9c2ece398d197c2663e.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="131" src="http://gyazo.com/1a39243fe1dbf9c2ece398d197c2663e.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;模様がなくても取れるのがステレオカメラとの違い。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/6d9ed1f73f473afddf4b5d68504b00e3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="129" src="http://gyazo.com/6d9ed1f73f473afddf4b5d68504b00e3.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;遠いところ（扉の奥）は見えない（白く抜けている）&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/ceb1727b1a62203c81a92dd7bd680a66.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="130" src="http://gyazo.com/ceb1727b1a62203c81a92dd7bd680a66.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;やっぱり直射日光には弱い。&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/415a02d58bed75350c31216624c781d6.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="129" src="http://gyazo.com/415a02d58bed75350c31216624c781d6.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/7fe53bd856075ffe7d6426bc6f6b5e98.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="129" src="http://gyazo.com/7fe53bd856075ffe7d6426bc6f6b5e98.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;全体的にのっぺりしたところが得意みたいです。&lt;br /&gt;&lt;br /&gt;全体的にイイです。&lt;br /&gt;想定した通りのイメージ。&lt;br /&gt;&lt;br /&gt;障害物回避に使うには、近距離が見えなすぎるので実用的ではないきがしてきました。&lt;br /&gt;どうしましょう。&lt;br /&gt;&lt;br /&gt;以下インストールから実行方法。&lt;br /&gt;&lt;br /&gt;基本的に以下の通りにやりました。&lt;br /&gt;&lt;a href="http://www.ros.org/wiki/kinect"&gt;http://www.ros.org/wiki/kinect&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;ol style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;" type="1"&gt;&lt;li&gt;rosintallスクリプトとgitのインストール&lt;br /&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;sudo apt-get install python-setuptools&lt;br /&gt;sudo easy_install -U rosinstall&lt;br /&gt;sudo apt-get install git-core&lt;/pre&gt;&lt;span class="anchor" id="line-21"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;rosintallファイルを入手&lt;br /&gt;&lt;span class="anchor" id="line-24"&gt;&lt;/span&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;wget http://github.com/ros-pkg-git/kinect/raw/master/kinect.rosinstall --no-check-certificate&lt;/pre&gt;&lt;span class="anchor" id="line-25"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;ROS-kinect stackの入手&lt;span class="anchor" id="line-28"&gt;&lt;/span&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;rosinstall ~/kinect-devel /opt/ros/cturtle kinect.rosinstall&lt;/pre&gt;&lt;span class="anchor" id="line-29"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;libfreenectをgitで入手&lt;span class="anchor" id="line-33"&gt;&lt;/span&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;cd ~/kinect-devel/kinect&lt;br /&gt;git submodule update --init --recursive&lt;/pre&gt;&lt;span class="anchor" id="line-34"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;ビルド&lt;br /&gt;&lt;span class="anchor" id="line-38"&gt;&lt;/span&gt;&lt;pre style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; font-family: courier, monospace; padding-bottom: 5pt; padding-left: 5pt; padding-right: 5pt; padding-top: 5pt; white-space: pre-wrap; word-wrap: break-word;"&gt;. ~/kinect-devel/setup.sh&lt;br /&gt;rosmake kinect --rosdep-install&lt;/pre&gt;&lt;span class="anchor" id="line-39"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-40"&gt;&lt;/span&gt;&lt;span class="anchor" id="line-41"&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="line867" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;/div&gt;&lt;br /&gt;ただし、このままでは動かないので&lt;br /&gt;$&amp;nbsp;sudo chmod -R 777 &amp;nbsp;/dev/bus/usb/&lt;br /&gt;しました。&lt;br /&gt;&lt;br /&gt;実行方法は&lt;br /&gt;$ roscore&lt;br /&gt;$ roscd kinect_camera&lt;br /&gt;$ bin/kinect_node&lt;br /&gt;して、&lt;br /&gt;もうひとつのターミナルで&lt;br /&gt;$ rosrun image_view image_view image:=/camera/depth/image_raw&lt;br /&gt;で、デプスイメージの表示&lt;br /&gt;&lt;br /&gt;$ rosrun image_view image_view image:=/camera/rgb/image_raw&lt;br /&gt;でカメラ画像の表示です。&lt;br /&gt;&lt;br /&gt;これからPCLも試してみます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-7552553737188881733?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/7552553737188881733/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2010/11/kinectros.html#comment-form' title='2 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/7552553737188881733'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/7552553737188881733'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2010/11/kinectros.html' title='KinectをROSで使ってみる'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-6624960368468618992</id><published>2010-11-19T23:57:00.000+09:00</published><updated>2010-11-19T23:57:00.985+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>rosmsg users</title><content type='html'>いつのまにかros-kinectメーリングリストまでできてますね。&lt;br /&gt;興味のある人はSubscribeしておいたほうがいいのでは。&lt;br /&gt;&lt;br /&gt;ROSメーリスを読んでいて見つけた小ネタですが、&lt;br /&gt;あるメッセージタイプを利用しているファイルを全部見つけてくれるコマンドが&lt;br /&gt;rosmsgにあったんですね。&lt;br /&gt;&lt;br /&gt;geometry_msgs/Twistを利用しているファイルを見つけたいときは&lt;br /&gt;&lt;br /&gt;$ rosmsg users geometry_msgs/Twist&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;とするとstacksからすべて列挙してくれます。&lt;/div&gt;&lt;div&gt;便利。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-6624960368468618992?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/6624960368468618992/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2010/11/rosmsg-users.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6624960368468618992'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6624960368468618992'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2010/11/rosmsg-users.html' title='rosmsg users'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-2658383711076463904</id><published>2010-11-12T19:08:00.001+09:00</published><updated>2010-11-12T19:12:47.567+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Kinect'/><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>ROS Kinect node</title><content type='html'>Kinectはご存知ですか？&lt;br /&gt;&lt;a href="http://www.xbox.com/ja-JP/kinect"&gt;http://www.xbox.com/ja-JP/kinect&lt;/a&gt;&lt;br /&gt;XBOX360のWiiに対抗？したコントローラー？で、&lt;br /&gt;カメラで人の形状を認識して、ジェスチャなどで遊ぶことができます。&lt;br /&gt;&lt;br /&gt;で、それに使われているのがPrime Sense&lt;br /&gt;&lt;a href="http://www.primesense.com/"&gt;http://www.primesense.com/&lt;/a&gt;&lt;br /&gt;というセンサで、３次元形状が単眼カメラ＋プロジェクタで取得できるというものです。&lt;br /&gt;&lt;br /&gt;Kinectも同じように３次元形状を取得できるはずですが、&lt;br /&gt;XBOX360の発売元のMicrosoftはそれをしてほしくない&lt;br /&gt;（ゲームのコントローラだから安く売れる、つまりゲームソフトで元を取る）&lt;br /&gt;ので、APIなどは公開されていません。&lt;br /&gt;&lt;br /&gt;それをハックした人がいました。&lt;br /&gt;（ハックには懸賞金$3000($1000から徐々にあがりました）がかけられていました。）&lt;br /&gt;&lt;br /&gt;で、さらにそれをROSで使いやすいようにした人がいます。&lt;br /&gt;↓はそのビデオ。３次元形状がとれてますね。Viewerはrvizのようです。&lt;br /&gt;&lt;br /&gt;&lt;object height="344" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/IxRIL1izvDs?fs=1&amp;amp;hl=ja_JP"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;param name="allowscriptaccess" value="always"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/IxRIL1izvDs?fs=1&amp;amp;hl=ja_JP" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;最近はこの話題でもちきりです。僕の中では。&lt;br /&gt;何がスゴイって、安いんです。１２０００円で買えるんです。&lt;br /&gt;普通のレーザーだって40万とか、３Dだと100万円でも安いほう？&lt;br /&gt;ですから、この値段は本当に驚異的です。&lt;br /&gt;さすがに精度はでないと思うので、用途は限定的になるかと思いますが、&lt;br /&gt;非常に想像力を掻き立てられます！&lt;br /&gt;&lt;br /&gt;早速Kinect予約しました。日本では11/20発売です。&lt;br /&gt;XBOX360は持ってません！&lt;br /&gt;&lt;br /&gt;届いたらこれを使ってPCLやらいろいろ認識系ソフトを試してみたいと思います。&lt;br /&gt;それまでにキャリブレーションとかできるようになっていることに期待。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-2658383711076463904?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/2658383711076463904/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2010/11/ros-kinect-node.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/2658383711076463904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/2658383711076463904'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2010/11/ros-kinect-node.html' title='ROS Kinect node'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-7323889939399624205</id><published>2010-11-10T23:04:00.000+09:00</published><updated>2010-11-10T23:04:50.262+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><title type='text'>ROSのwikiにページできてた</title><content type='html'>今日気づいたのですが、いつのまにかROSのwikiにotl-ros-pkgのページが自動で生成されていました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ros.org/wiki/otl-ros-pkg"&gt;http://www.ros.org/wiki/otl-ros-pkg&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;本名ダダ漏れになっていますが、どうしよう。。。。&lt;br /&gt;&lt;br /&gt;とりあえず、せっかくなのでこの前@nao_sodyさんに作ってもらったロゴを付けておきました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/a733e8e401e661bfcecbc603b361c226.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://gyazo.com/a733e8e401e661bfcecbc603b361c226.png" width="282" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-7323889939399624205?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/7323889939399624205/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2010/11/roswiki.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/7323889939399624205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/7323889939399624205'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2010/11/roswiki.html' title='ROSのwikiにページできてた'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-3727946652986589941</id><published>2010-11-07T20:01:00.000+09:00</published><updated>2010-11-07T20:01:57.225+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ARToolKit'/><title type='text'>OTLマーカー</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;こんにちは。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;OTLのARマーカーが出来ました。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;デザインは某デザイン工房にてお願いしました。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;うーん、これはいいな。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;ちゃんと認識もできました。&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/da99f8de8a4ce2ac66638fc1504e1e68.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="280" src="http://gyazo.com/da99f8de8a4ce2ac66638fc1504e1e68.png" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;mk_pattというコマンドでパターンファイル（ARToolKitが認識するために必要なデータファイル）を作るのですが、これがROSのものだと動きません。(ARToolKitがVideo4Linux2未対応なため）&lt;br /&gt;そこで結局以前いれたVideo4Linux2対応版(aistのパッチを当てたもの)を利用してパターンファイルを作りました。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-3727946652986589941?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/3727946652986589941/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2010/11/otl.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/3727946652986589941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/3727946652986589941'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2010/11/otl.html' title='OTLマーカー'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-1701842168557165730</id><published>2010-11-06T22:24:00.000+09:00</published><updated>2010-11-06T22:24:04.178+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><category scheme='http://www.blogger.com/atom/ns#' term='ARToolKit'/><title type='text'>camera_calibration(USBカメラのキャリブレーション)</title><content type='html'>&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;今日はカメラのキャリブレーションをやります。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ros.org/wiki/camera_calibration/Tutorials/MonocularCalibration"&gt;http://www.ros.org/wiki/camera_calibration/Tutorials/MonocularCalibration&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;１．チェックボードの印刷&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;研究等でカメラをやる人にはおなじみなのですが、F1のチェッカーフラッグのような&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;画像を見せてカメラのキャリブレーションをします。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;このチュートリアルにある↓のファイルを印刷してもいいですし、&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;a href="http://www.ros.org/wiki/camera_calibration/Tutorials/MonocularCalibration?action=AttachFile&amp;amp;do=get&amp;amp;target=check-108.pdf"&gt;http://www.ros.org/wiki/camera_calibration/Tutorials/MonocularCalibration?action=AttachFile&amp;amp;do=get&amp;amp;target=check-108.pdf&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;他のチェッカーでもサイズが分かっていればいいと思います。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;そしてこれはそのままだと大きすぎて印刷大変でしょうから、僕はA4サイズでやりました。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;チェックボードもPTAMで印刷したものがあったので、それでやっちゃいました。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;２．キャリブレーションの実行&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;まず以下のようにして、camera_calibrationが使えるようにしましょう。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;$ rosmake camera_calibration --rosdep-install&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;そしたら、チェッカーボードのサイズにあわせて以下のようにしてキャリブレーションプログラムを走らせます。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;$ rosrun camera_calibration cameracalibrator.py --size 8x6 --square 0.108 image:=/usb_cam/image_raw&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;私はPTAMのcalib_pattern.pdfを使ったので、&lt;/div&gt;&lt;div&gt;$ rosrun camera_calibration cameracalibrator.py --size 11x7 --square 0.02 image:=/usb_cam/image_raw&lt;/div&gt;&lt;div&gt;でやりました。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;原文にあるように最後にcamera:=/usb_camなどを付けると/usb_cam/set_camera_infoサービスを呼ぼうとするので失敗するので付けないでください。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"&gt;&lt;a href="http://gyazo.com/72fdeae209872df5359ff916397aa7ed.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="227" src="http://gyazo.com/72fdeae209872df5359ff916397aa7ed.png" style="cursor: move;" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;すると↑のような画面が表示されるので、&lt;/div&gt;&lt;div&gt;グリグリと、いろんな方向からこのチェッカーボードをカメラで見せてください。&lt;/div&gt;&lt;div&gt;しばらくやっているとCALIBRATEボタンが有効になるので、これをクリックー&amp;gt;SAVEボタンをクリックしてください。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;３．データの確認&lt;/b&gt;&lt;/div&gt;&lt;div&gt;すると&lt;/div&gt;&lt;div&gt;/tmp/calibrationdata.tar.gz&lt;/div&gt;&lt;div&gt;にキャリブレーションに使った画像ファイルとデータが保存されます。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$ tar zxvf /tmp/calibrationdata.tar.gz&lt;/div&gt;&lt;div&gt;すると、&lt;/div&gt;&lt;div&gt;&lt;div&gt;left-0000.png&lt;/div&gt;&lt;div&gt;left-0001.png&lt;/div&gt;&lt;div&gt;left-0002.png&lt;/div&gt;&lt;div&gt;left-0003.png&lt;/div&gt;&lt;div&gt;left-0004.png&lt;/div&gt;&lt;div&gt;left-0005.png&lt;/div&gt;&lt;div&gt;left-0006.png&lt;/div&gt;&lt;div&gt;left-0007.png&lt;/div&gt;&lt;div&gt;left-0008.png&lt;/div&gt;&lt;div&gt;left-0009.png&lt;/div&gt;&lt;div&gt;left-0010.png&lt;/div&gt;&lt;div&gt;left-0011.png&lt;/div&gt;&lt;div&gt;left-0012.png&lt;/div&gt;&lt;div&gt;left-0013.png&lt;/div&gt;&lt;div&gt;left-0014.png&lt;/div&gt;&lt;div&gt;left-0015.png&lt;/div&gt;&lt;div&gt;left-0016.png&lt;/div&gt;&lt;div&gt;left-0017.png&lt;/div&gt;&lt;div&gt;left-0018.png&lt;/div&gt;&lt;div&gt;left-0019.png&lt;/div&gt;&lt;div&gt;left-0020.png&lt;/div&gt;&lt;div&gt;left-0021.png&lt;/div&gt;&lt;div&gt;left-0022.png&lt;/div&gt;&lt;div&gt;left-0023.png&lt;/div&gt;&lt;div&gt;left-0024.png&lt;/div&gt;&lt;div&gt;left-0025.png&lt;/div&gt;&lt;div&gt;left-0026.png&lt;/div&gt;&lt;div&gt;left-0027.png&lt;/div&gt;&lt;div&gt;left-0028.png&lt;/div&gt;&lt;div&gt;ost.txt&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;と、いろいろ出てきます。&lt;/div&gt;&lt;div&gt;重要なのは最後のost.txtです。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;このファイルの中身は以下のようになっています。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;# oST version 5.0 parameters&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[image]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;width&lt;/div&gt;&lt;div&gt;640&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;height&lt;/div&gt;&lt;div&gt;480&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[narrow_stereo/left]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;camera matrix&lt;/div&gt;&lt;div&gt;849.555669 0.000000 310.565257&lt;/div&gt;&lt;div&gt;0.000000 850.171143 237.409081&lt;/div&gt;&lt;div&gt;0.000000 0.000000 1.000000&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;distortion&lt;/div&gt;&lt;div&gt;0.270500 -1.345412 -0.000040 -0.001902 0.0000&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;rectification&lt;/div&gt;&lt;div&gt;1.000000 0.000000 0.000000&lt;/div&gt;&lt;div&gt;0.000000 1.000000 0.000000&lt;/div&gt;&lt;div&gt;0.000000 0.000000 1.000000&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;projection&lt;/div&gt;&lt;div&gt;849.555669 0.000000 310.565257 0.000000&lt;/div&gt;&lt;div&gt;0.000000 850.171143 237.409081 0.000000&lt;/div&gt;&lt;div&gt;0.000000 0.000000 1.000000 0.000000&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;これがカメラのパラメータになります。&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;以上でキャリブレーションは終わりです。&lt;br /&gt;前回の続きで、ar_poseにこの結果を利用してみます。&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;ar_poseの実行&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$ roscd ar_pose&lt;/div&gt;&lt;div&gt;$ cd launch&lt;/div&gt;&lt;div&gt;して、&lt;/div&gt;&lt;div&gt;以下をar_pose_single.launchのパラメータを書き換えます。&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;D: ost.txtのdistortion&lt;/div&gt;&lt;div&gt;K:&amp;nbsp;ost.txtのcamera matrix&lt;/div&gt;&lt;div&gt;R:&amp;nbsp;ost.txtのrectification&lt;/div&gt;&lt;div&gt;P:&amp;nbsp;ost.txtのprojection&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;になるようにします。&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&amp;lt;launch&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;lt;param name="use_sim_time" value="false"/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;lt;node pkg="rviz" type="rviz" name="rviz"&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;args="-d $(find ar_pose)/demo/demo_single.vcg"/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;lt;node pkg="tf" type="static_transform_publisher" name="world_to_cam"&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;args="1 1 0.3 0 0 0 world ar_marker 10" /&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;lt;node name="usb_cam" pkg="usb_cam" type="usb_cam_node" respawn="false" output="log"&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;param name="video_device" type="string" value="/dev/video0"/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;param name="camera_frame_id" type="string" value="usb_cam"/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;param name="io_method" type="string" value="mmap"/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;param name="image_width" type="int" value="640"/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;param name="image_height" type="int" value="480"/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;param name="pixel_format" type="string" value="yuyv"/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;rosparam param="D"&amp;gt;[0.270500, -1.345412, -0.000040, -0.001902, 0.0000]&amp;lt;/rosparam&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;rosparam param="K"&amp;gt;[849.555669, 0.000000, 310.565257, 0.000000, 850.171143, 237.409081, 0.000000, 0.000000, 1.000000]&amp;lt;/rosparam&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;rosparam param="R"&amp;gt;[1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]&amp;lt;/rosparam&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;rosparam param="P"&amp;gt;[849.555669, 0.000000, 310.565257, 0.000000, 0.000000, 850.171143, 237.409081, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000]&amp;lt;/rosparam&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/node&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;lt;node name="ar_pose" pkg="ar_pose" type="ar_single" respawn="false" output="screen"&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;param name="marker_pattern" type="string" value="data/patt.hiro"/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;param name="marker_width" type="double" value="80.0"/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;param name="marker_center_x" type="double" value="0.0"/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;param name="marker_center_y" type="double" value="0.0"/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;param name="marker_frame" type="string" value="ar_marker"/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;param name="threshold" type="int" value="100"/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;param name="use_history" type="bool" value="true"/&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/node&amp;gt;&lt;/div&gt;&lt;div&gt;&amp;lt;/launch&amp;gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;$ roslaunch ar_pose_single.launch&lt;/div&gt;&lt;div&gt;すると、USBカメラ位置がrviz上でマーカーからの相対で表示されます。&lt;/div&gt;&lt;div&gt;少しは精度よくなったのかな？&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; text-align: center;"&gt;&lt;a href="http://gyazo.com/941cdb1d3527e357933455f4e558ff1e.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://gyazo.com/941cdb1d3527e357933455f4e558ff1e.png" style="cursor: move;" width="293" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;以上です。&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-1701842168557165730?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/1701842168557165730/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2010/11/cameracalibrationusb.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/1701842168557165730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/1701842168557165730'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2010/11/cameracalibrationusb.html' title='camera_calibration(USBカメラのキャリブレーション)'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-6877887490723109744</id><published>2010-11-06T11:34:00.000+09:00</published><updated>2010-11-06T11:34:31.855+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><category scheme='http://www.blogger.com/atom/ns#' term='ARToolKit'/><title type='text'>ar_pose (ARToolKitのマーカー認識 in ROS)パッケージを使ってみる</title><content type='html'>ar_poseパッケージはARToolKitの機能のうち、マーカーの位置姿勢を認識する機能だけを取り出して、TFメッセージを書き出すようにしたCCNY(City University of New York)のパッケージです。&lt;br /&gt;&lt;br /&gt;前回はインストールまでやりました。&lt;br /&gt;&lt;br /&gt;前回の記事でusb_camパッケージはcamera_infoトピックを発行しないのでどうしよう？&lt;br /&gt;ということを書きましたが、これは古いusb_camパッケージを使っていたからで、&lt;br /&gt;最新のboschのusb_camパッケージではちゃんと対応していました。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ros.org/wiki/bosch-ros-pkg#bosch_drivers"&gt;http://www.ros.org/wiki/bosch-ros-pkg#bosch_drivers&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;$&amp;nbsp;svn export http://bosch-ros-pkg.svn.sourceforge.net/svnroot/bosch-ros-pkg/trunk/stacks/bosch_drivers&lt;br /&gt;&lt;br /&gt;のようにしてソフトをダウンロードし、&lt;br /&gt;$ rosmake usb_cam&lt;br /&gt;とすればOKですね。&lt;br /&gt;&lt;br /&gt;ar_pose/launch/ar_pose_single.launch&lt;br /&gt;を覗いてみたら、ちゃんとこのusb_camパッケージを使っていましたので、&lt;br /&gt;USBカメラで簡単に試せるようになっています。&lt;br /&gt;&lt;br /&gt;&lt;b&gt;１．USBカメラの動作確認&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;まずはカメラをPCに差してusb_camノードを立ち上げます。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;以下のようなusb.launchを用意して、&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;launch&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;node name="usb_cam" pkg="usb_cam" type="usb_cam_node" output="screen" &amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;param name="video_device" value="/dev/video0" /&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;param name="image_width" value="640" /&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;param name="image_height" value="480" /&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;param name="pixel_format" value="yuyv" /&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;param name="camera_frame_id" value="usb_cam" /&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;lt;param name="io_method" value="mmap" /&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;nbsp;&amp;nbsp;&amp;lt;/node&amp;gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&amp;lt;/launch&amp;gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;$ roslaunch usb.launch&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;するとキャプチャ開始されると思います。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;$ rosrun image_view image_view image:=/usb_cam/image_raw&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;とすると表示されます。されなければ、上記usb.launchの各種設定を見直してください。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;確認が終わったらimage_viewは落しちゃっていいです。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;動作確認が終わったらusb.launchのほうも一旦落としてください。&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;２．パターンの印刷&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;ではまず、&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;$ roscd artoolkit&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;して、&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;build/artoolkit-svn/patterns/pattHiro.pdf&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;を印刷してください。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;↓です。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/02ecc6cb591a744fa6750a3f01d620b9.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" src="http://gyazo.com/02ecc6cb591a744fa6750a3f01d620b9.png" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;３．ar_poseの実行&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;$ roscd ar_pose&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;launch/ar_pose_single.launch&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;のusb_camノードの必要なパラメータ（pixel_formatなど）だけ書き換えて、&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;$ roslaunch ar_pose ar_pose_single.launch&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;してみましょう。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;ほら、簡単でしょう？&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://gyazo.com/b7bdb8b43fcfe2e6439a8887ac1b0565.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://gyazo.com/b7bdb8b43fcfe2e6439a8887ac1b0565.png" width="264" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;ちなみに私の環境ではar_pose_single.launchは以下のような感じです。&lt;/div&gt;&lt;div style="margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;launch&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;lt;param name="use_sim_time" value="false"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;node pkg="rviz" type="rviz" name="rviz"&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;args="-d $(find ar_pose)/launch/live_single.vcg"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;node pkg="tf" type="static_transform_publisher" name="world_to_cam"&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; args="1 1 0.3 0 0 0 world ar_marker 10" /&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;node name="usb_cam" pkg="usb_cam" type="usb_cam_node" respawn="false" output="log"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="video_device" type="string" value="/dev/video0"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="camera_frame_id" type="string" value="usb_cam"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="io_method" type="string" value="mmap"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="image_width" type="int" value="640"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="image_height" type="int" value="480"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="pixel_format" type="string" value="yuyv"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;rosparam param="D"&amp;gt;[0.025751483065329935, -0.10530741936574876,-0.0024821434601277623, -0.0031632353637182972, 0.0000]&amp;lt;/rosparam&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;rosparam param="K"&amp;gt;[558.70655574536931, 0.0, 316.68428342491319, 0.0, 553.44501004322387, 238.23867473419315, 0.0, 0.0, 1.0]&amp;lt;/rosparam&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;rosparam param="R"&amp;gt;[1.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0]&amp;lt;/rosparam&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;rosparam param="P"&amp;gt;[558.70655574536931, 0.0, 316.68428342491319, 0.0, 0.0, 553.44501004322387, 238.23867473419315, 0.0, 0.0, 0.0, 1.0, 0.0]&amp;lt;/rosparam&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;lt;/node&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;node name="ar_pose" pkg="ar_pose" type="ar_single" respawn="false" output="screen"&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="marker_pattern" type="string" value="data/patt.hiro"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="marker_width" type="double" value="80.0"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="marker_center_x" type="double" value="0.0"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="marker_center_y" type="double" value="0.0"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="threshold" type="int" value="100"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;param name="use_history" type="bool" value="true"/&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;lt;/node&amp;gt;&lt;br /&gt;&amp;lt;/launch&amp;gt;&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;以上です。あとはTFになっているんで、焼くなり煮るなりなんとでも。。。&lt;br /&gt;カメラパラメータが適当なので、それなりに表示はされていますが、位置はずれていると思います。&lt;br /&gt;&lt;br /&gt;次回はキャリブレーションをやってみます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-6877887490723109744?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/6877887490723109744/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://ros-robot.blogspot.com/2010/11/arpose-artoolkit-in-ros.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6877887490723109744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/455603831687802617/posts/default/6877887490723109744'/><link rel='alternate' type='text/html' href='http://ros-robot.blogspot.com/2010/11/arpose-artoolkit-in-ros.html' title='ar_pose (ARToolKitのマーカー認識 in ROS)パッケージを使ってみる'/><author><name>OTL</name><uri>http://www.blogger.com/profile/02145398150939802106</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='19' src='http://2.bp.blogspot.com/_RCciaOESQtI/TN0T0bg1S2I/AAAAAAAAEo4/CbfDPEQjsns/S220/OTL_LOGO_Blue_small.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-455603831687802617.post-3673810184338753820</id><published>2010-11-04T22:48:00.000+09:00</published><updated>2010-11-04T22:48:30.511+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ROS'/><category scheme='http://www.blogger.com/atom/ns#' term='ARToolKit'/><title type='text'>ARToolKitをccny_visionを使ってインストール</title><content type='html'>以前&lt;a href="http://ros-robot.blogspot.com/2010/04/artoolkitubuntu-904.html"&gt;ARToolKitをインストール&lt;/a&gt;して、&lt;a href="http://ros-robot.blogspot.com/2010/04/artoolkit.html"&gt;試す&lt;/a&gt;ところまではやりましたが&lt;br /&gt;ROSとつなげる前に挫折しました。&lt;br /&gt;&lt;br /&gt;そしたらすでにやってくれている人がいましたので、こちらを利用してみます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ros.org/wiki/ccny_vision"&gt;http://www.ros.org/wiki/ccny_vision&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;まず以下のようにしてコードをコピーします。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="codearea" dir="ltr" lang="en" style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; color: black; font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;pre dir="ltr" id="CA-2196e9360c0b989d06cd051839f98e9d332da208" lang="en" style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: none; border-bottom-width: 1pt; border-color: initial; border-left-color: rgb(174, 189, 204); border-left-style: none; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: none; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: none; border-top-width: 1pt; border-width: initial; font-family: courier, monospace; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 10pt; padding-left: 10pt; padding-right: 10pt; padding-top: 10pt; white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="line"&gt;&lt;span class="ResWord" style="color: #a00000;"&gt;$ cd&lt;/span&gt; &lt;span class="SPChar" style="color: #0000c0;"&gt;~&lt;/span&gt;&lt;span class="SPChar" style="color: #0000c0;"&gt;/&lt;/span&gt;&lt;span class="ID" style="color: black;"&gt;ros&lt;/span&gt;&lt;span class="SPChar" style="color: #0000c0;"&gt;/&lt;/span&gt;&lt;span class="ID" style="color: black;"&gt;stacks&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="line"&gt;&lt;span class="ID" style="color: black;"&gt;$ git&lt;/span&gt; &lt;span class="ID" style="color: black;"&gt;clone&lt;/span&gt; &lt;span class="ID" style="color: black;"&gt;http&lt;/span&gt;&lt;span class="SPChar" style="color: #0000c0;"&gt;:&lt;/span&gt;&lt;span class="SPChar" style="color: #0000c0;"&gt;/&lt;/span&gt;&lt;span class="SPChar" style="color: #0000c0;"&gt;/&lt;/span&gt;&lt;span class="ID" style="color: black;"&gt;robotics&lt;/span&gt;&lt;span class="SPChar" style="color: #0000c0;"&gt;.&lt;/span&gt;&lt;span class="ID" style="color: black;"&gt;ccny&lt;/span&gt;&lt;span class="SPChar" style="color: #0000c0;"&gt;.&lt;/span&gt;&lt;span class="ID" style="color: black;"&gt;cuny&lt;/span&gt;&lt;span class="SPChar" style="color: #0000c0;"&gt;.&lt;/span&gt;&lt;span class="ID" style="color: black;"&gt;edu&lt;/span&gt;&lt;span class="SPChar" style="color: #0000c0;"&gt;/&lt;/span&gt;&lt;span class="ID" style="color: black;"&gt;git&lt;/span&gt;&lt;span class="SPChar" style="color: #0000c0;"&gt;/&lt;/span&gt;&lt;span class="ID" style="color: black;"&gt;ccny&lt;/span&gt;&lt;span class="SPChar" style="color: #0000c0;"&gt;-&lt;/span&gt;&lt;span class="ID" style="color: black;"&gt;ros&lt;/span&gt;&lt;span class="SPChar" style="color: #0000c0;"&gt;-&lt;/span&gt;&lt;span class="ID" style="color: black;"&gt;pkg&lt;/span&gt;&lt;span class="SPChar" style="color: #0000c0;"&gt;.&lt;/span&gt;&lt;span class="ID" style="color: black;"&gt;git&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;span class="anchor" id="line-18"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;span class="anchor" id="line-19"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;で、次にccny_visionスタックをmakeします。&lt;br /&gt;&lt;br /&gt;&lt;div class="codearea" dir="ltr" lang="en" style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: solid; border-bottom-width: 1pt; border-left-color: rgb(174, 189, 204); border-left-style: solid; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: solid; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: solid; border-top-width: 1pt; color: black; font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px; margin-bottom: 0.5em; margin-left: 0px; margin-right: 0px; margin-top: 0.5em; padding-bottom: 0px; padding-left: 0px; padding-right: 0px; padding-top: 0px;"&gt;&lt;pre dir="ltr" id="CA-8bdd4f4b7e2fd2100f9096e6e504f0e4fcf88c8a" lang="en" style="background-color: #f3f5f7; border-bottom-color: rgb(174, 189, 204); border-bottom-style: none; border-bottom-width: 1pt; border-color: initial; border-left-color: rgb(174, 189, 204); border-left-style: none; border-left-width: 1pt; border-right-color: rgb(174, 189, 204); border-right-style: none; border-right-width: 1pt; border-top-color: rgb(174, 189, 204); border-top-style: none; border-top-width: 1pt; border-width: initial; font-family: courier, monospace; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; padding-bottom: 10pt; padding-left: 10pt; padding-right: 10pt; padding-top: 10pt; white-space: pre-wrap; word-wrap: break-word;"&gt;&lt;span class="line"&gt;&lt;span class="ResWord" style="color: #a00000;"&gt;$ cd&lt;/span&gt; &lt;span class="SPChar" style="color: #0000c0;"&gt;~&lt;/span&gt;&lt;span class="SPChar" style="color: #0000c0;"&gt;/&lt;/span&gt;&lt;span class="ID" style="color: black;"&gt;ros&lt;/span&gt;&lt;span class="SPChar" style="color: #0000c0;"&gt;/&lt;/span&gt;&lt;span class="ID" style="color: black;"&gt;stacks&lt;/span&gt;&lt;span class="SPChar" style="color: #0000c0;"&gt;/&lt;/span&gt;&lt;span class="ID" style="color: black;"&gt;ccny&lt;/span&gt;&lt;span class="SPChar" style="color: #0000c0;"&gt;-&lt;/span&gt;&lt;span class="ID" style="color: black;"&gt;ros&lt;/span&gt;&lt;span class="SPChar" style="color: #0000c0;"&gt;-&lt;/span&gt;&lt;span class="ID" style="color: black;"&gt;pkg&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="line"&gt;&lt;span class="ID" style="color: black;"&gt;$ rosmake&lt;/span&gt; &lt;span class="ID" style="color: black;"&gt;ccny_vision&lt;/span&gt; &lt;span class="SPChar" style="color: #0000c0;"&gt;-&lt;/span&gt;&lt;span class="SPChar" style="color: #0000c0;"&gt;-&lt;/span&gt;&lt;span class="ID" style="color: black;"&gt;rosdep&lt;/span&gt;&lt;span class="SPChar" style="color: #0000c0;"&gt;-&lt;/span&gt;&lt;span class="ID" style="color: black;"&gt;install&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;span class="anchor" id="line-26"&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;span class="anchor" id="line-27"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="line867" style="font-family: Helvetica, Verdana, Arial, 'Lucida Grande', sans-serif; font-size: 15px;"&gt;&lt;/div&gt;&lt;br /&gt;rosmakeに--rosdep-installを付けると必要なソフトを自動でインストールまでやってくれます。&lt;br /&gt;&lt;br /&gt;とりあえずこれでインストールは終了です。&lt;br /&gt;すごく簡単ですね。&lt;br /&gt;&lt;br /&gt;実際に使うにはカメラのキャリブレーションをしないといけないです。&lt;br /&gt;ARToolKitのキャリブレーションではなくROSのカメラパラメータ(camera_infoトピック)が必要で、&lt;br /&gt;usb_camノードはこのcamera_infoトピックがありません。&lt;br /&gt;さあ、どうしましょう。&lt;br /&gt;&lt;br /&gt;OpenCVのカメラキャリブレーションを使ってできそうな気がするので&lt;br /&gt;また時間ができたらトライしてみたいと思います。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.ros.org/wiki/camera_calibration"&gt;http://www.ros.org/wiki/camera_calibration&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/455603831687802617-3673810184338753820?l=ros-robot.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://ros-robot.blogspot.com/feeds/3673810184338753820/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='h
