りさーちゃーのひよこ
技術のこととか
2015年8月17日月曜日
rosbag を使おうとしたら clock トピックにpublish しろと怒られる
#はじめに タイトルの通り. もう少し言うと,gazebo でロボット動かした後に一旦終了させて,画像処理のプログラム回して下記のコマンドを実行. <pre class="brush: bash;"> $ rosbag record /camera_info /image_raw -O images.bag </pre> 的なことをしたら, ``` use_sim_time set to true and no clock published. Still waiting for valid time... ``` とか言われて「ふむ」という話である. #やること もう一回`gazebo`でロボットのシミュレータを立ち上げてからrosbag をすればいい. 以上. 要は,/clock トピックはあるのに何にも入ってこないということで. 実際, <pre class="brush: bash;"> $ rostopic echo /clock </pre> と打てば`publish`されているかどうかが確認できる. 一回`gazebo`を立ち上げて,コンソールからCtrl+C で終了させた後に <pre class="brush: bash;"> $ rostopic list </pre> をすると,`gazebo`の発行したトピックやら設定やらが残っているようである. 素人の我輩にはよくわからぬが,とりあえず使えればいいです笑. そのうちどこかで見えてくるでしょう.
2015年8月7日金曜日
Ubuntu 14.04 上のROS (Indigo) でARToolKitを導入してみる
#はじめに ふとしたことから`ARToolKit`を導入しようと思ったのですが,ネット上の情報が余りにも散乱している.(いつものことだが...) チュートリアルがチュートリアルになっていない. てなわけで,解説がないと忘れてしまう自分のためにメモを残しておくといういつものパターン. #ARToolKitのインストール 本丸くんを入れる前に,いくつかやっておくべきことがあります. <a href="http://wiki.ros.org/ar_tools" target="_blank" title="">ROS.org- ar_tools</a> を参考にしましたが,つまづいたので段階的に導入. ##ROS用のARToolKit のパッケージを探す `roslocate`がなければ<a href="http://wiki.ros.org/roslocate" target="_blank" title="">インストール</a> <pre class="brush: bash;"> $ roslocate info ar_tools </pre> 出力は以下のようになります. <pre class="brush: bash;"> - git: local-name: ar_tools uri: https://github.com/ar-tools/ar_tools.git version: master </pre> ##上記パッケージをローカルにダウンロード - `wstool`がなければ<a href="http://wiki.ros.org/wstool" target="_blank" title="">インストール</a> - 初期化.`~/catin_ws/src/.rosinstall`が作成されます. <pre class="brush: bash;"> $ wstool init ~/catin_ws/src </pre> - 取得 <pre class="brush: bash;"> $ cd ~/catin_ws $ wstool set --target-workspace=src ar_tools --git https://github.com/ar-tools/ar_tools.git </pre> - 更新 <pre class="brush: bash;"> $ wstool update ar_tools --target-workspace=src ar_tools </pre> ##パッケージのインストールとビルド <pre class="brush: bash;"> $ rosdep install -i --from-paths ar_tools $ cd ~/catin_ws $ catkin_make </pre> #uvc_camera パッケージのインストール サンプルとして`ar_pose`を使いたいので, `~/catkin_ws/src/ar_tools/ar_pose/launch/README.md` を覗いてみると, uvc_camera driver が必要とのこと. チュートリアルを見てもさっぱりわからなかったので,ネットの海をさまよってこちらのサイトを見つける <a href="https://defendtheplanet.net/2014/11/05/using-ros-indigo-webcam-by-the-uvc_camera-usb-video-class-package/" target="_blank" title="">Using ROS Indigo with a Webcam by the uvc_camera (USB Video Class) package</a>< ##パッケージの取得・インストール・ビルド - 取得 <pre class="brush: bash;"> $ cd ~/catkin_ws/src/ $ git clone https://github.com/ktossell/camera_umd.git </pre> - インストール <pre class="brush: bash;"> $ rosdep install camera_umd uvc_camera jpeg_streamer </pre> - ビルド <pre class="brush: bash;"> $ cd ~/catkin_ws $ catkin_make #build the workspace </pre> ##依存モジュール追加 <pre class="brush: bash;"> $ sudo apt-get install libv4l-dev </pre> ##動作確認 <pre class="brush: bash;"> $ roscd uvc_camera/launch/ $ roslaunch ./camera_node.launch $ rosrun image_view image_view image:=image_raw </pre> #ar_poseの動作のための準備 ##サンプル用launchファイルの編集 `~/catkin_ws/src/ar_tools/ar_pose/launch/ar_pose_single.launch` を確認する.注意すべき点を挙げます. - カメラの設定 <pre class="brush: xml;"> <node ns="camera" pkg="uvc_camera" type="uvc_camera_node" name="uvc_camera" output="log"> </pre> タグ内の <pre class="brush: xml;"> <param name="device" type="string" value="/dev/video0" /> </pre> を,認識されているカメラの名前に合わせること. - マーカの設定 <pre class="brush: xml;"> <node name="ar_pose" pkg="ar_pose" type="ar_single" respawn="false" output="screen"> </pre> タグ内の, <pre class="brush: xml;"> <param name="marker_pattern" type="string" value="$(find ar_pose)/data/patt.hiro"/> </pre> を,認識対象のマーカに合わせること. ##カメラキャリブレーション こちらを参照 → <a href="http://wiki.ros.org/camera_calibration/Tutorials/MonocularCalibration" target="_blank" title="">ROS.org - camera_calibrationTutorialsMonocularCalibration </a> `~/catkin_ws/src/ar_tools/ar_pose/launch/ar_pose_single.launch` では,キャリブレーションパラメータを yaml 形式で渡す必要があります. まずはキャリブレーションせねば汗. ###キャリブレータの導入 <pre class="brush: bash;"> $ cd ~/catkin_ws $ rosdep install camera_calibration $ catkin_make </pre> ###キャリブレータの起動 - まずはカメラが動いていることを確認./image_raw がトピックでいるはず. <pre class="brush: bash;"> $ rostopic list </pre> - 動いていなければ実行. <pre class="brush: bash;"> $ roslaunch uvc_camera camera_node.launch </pre> - いよいよ起動 <pre class="brush: bash;"> $ rosrun camera_calibration cameracalibrator.py --size 11x7 --square 0.02 image:=/image_raw </pre> ここで,キャリブレーションボードはPTAMのボードを使います. <a href="https://www.blogger.com/null"></a><a href="https://github.com/ethz-asl/ethzasl_ptam" target="_blank" title="">GitHub - ethz-asl/ethzasl_ptam</a> の/ptam/calib_pattern.pdf を使用しました. 11x7 はキャリブレーションボードの格子点の数,0.02[m] (=2cm) は正方形格子の一辺の長さです. ###キャリブレーションの実行 色々な角度で撮りまくる.勝手にキャプチャしてくれる. 40枚くらい撮り終わると,CALIBLATE ボタンが有効になるので,ポチる. しばらく待つ.1, 2分かかることもある.応答がなくなりグレーアウトしても,待つ. ##キャリブレーションファイルを yaml 形式に変換 まだ終わりません汗. こちらを参照 → <a href="http://wiki.ros.org/camera_calibration_parsers" target="_blank" title="">camera_calibration_parsers</a> - キャリブレーションファイル保存 - 計算が終わると SAVE ボタンが有効になるので,保存. - デフォルトで /tmp/calibrationdata.tar.gz に保存される. - 解凍して,中身の ost.txt を ~/catin_ws/src/camera_umd/uvc_camera に移動. - ファイル変換 <pre class="brush: bash;"> $ mv ost.txt ost.ini $ rosrun camera_calibration_parsers convert ost.ini camera_calibration.yaml </pre> - この名前にしておけば, `~/catin_ws/src/ar_tools/ar_pose/launch/ar_pose_single.launch` 内の, <pre class="brush: xml;"> <param name="camera_info_url" type="string" value="file://$(find uvc_camera)/camera_calibration.yaml" /> </pre> との整合性がそのまま取れます. #ar_poseの動作確認 ##実行 <pre class="brush: bash;">$ roslaunch ar_pose ar_pose_single.launch </pre> <a class="detailOn" href="http://blog-imgs-86.fc2.com/m/o/r/morimoridiary254/blog_import_568b66f11875b.png" id="i13388897181"><img alt="artoolkit" src="http://blog-imgs-86.fc2.com/m/o/r/morimoridiary254/blog_import_568b66f11875b.png" id="1438945100222" ratio="1.238390092879257" style="border: currentColor; height: 323px; width: 400px;" /></a><br /> ようやくここまで来た... キャリブレーション yaml ファイルがないと,ここで怒られちゃうので,ちゃんとキャリブレーションしておきましょう. #おわりに どんだけやらせんだよw 超大変だったし!Wiki のチュートリアルがチュートリアルになってない!w まぁ,動いたからよしとしましょう.勉強になりました.
2015年8月2日日曜日
Ubuntu 14.04 上のROS (Indigo) でQtCreatorを導入する
#はじめに とりあえずROSのプログラムをC++で実装したりできるようになった. だが,まだ大きな問題がある.開発環境だ. しばらくvimで頑張ってみたが,やはり私にはIDEが必要である. CUIでちゃちゃっとやりたいときは確かに便利だけど,プロジェクト全体を見渡したり,相互参照するにはIDEが圧倒的に便利. そんなのvimのプラグインでやればいいじゃん,なんですが,どうもあの世界は私の肌には合わない. なんでちょっと設定追加するだけであんなに苦労せないかんのだ笑. 目的に応じて最適化されたツールを使い分けて効率的に開発することを,私は悪いとは思わない考えをもっているので,もうIDEを入れようと思う. #IDEの選定 ちょっと調べたが,QtCreatorに決定. CMakeListsに対応しているので,ツール向けに余計な設定をしなくても導入ができるっぽい. ROSワークスペースに変な影響を与えたくないので,これにした. #QtCreatorの導入手順 ※初版で書いた内容が余りにもひどいので,改版した.色々試したら問題だらけでした汗.<br /> この動画が大変役に立った...本当に助かった.<br /> →<a href="https://www.youtube.com/watch?v=NG05o_SV1iw" target="_blank" title="">How to open ROS package by qtcreator </a> #インストール - Ubuntu 標準のソフトウェアセンターで"QtCreator"で検索して,インストールする. - 実はこのあとインストーラでver. 3.4を入れ直した.ソフトウェアセンターのバージョンver. 3.1と古く,しかもプロジェクトを再起動すると開けないというバグがあった.それに,上記動画サイトと同じ画面で設定できる.下記はver. 3.1の時のあがきの遺産なので,じきメンテします. #ROSワークスペースのビルド - 初めにコマンドラインからROSのワークスペースを`catkin_make`しておく必要があります.QtCreatorは一からやってくれません. - catkin_make と,その中身の挙動についてはROS wikiを参照.</br> <a href="http://wiki.ros.org/catkin/Tutorials/using_a_workspace" target="_blank" title="">ROS.org - catkinTutorialsusing_a_workspace </a><br /> - 上記サイトにしたがって,勉強がてらcatkin_makeを使わずにビルドしてみました. すると, `~/catkin_ws/devel` に実行ファイルなど色々と出力されます. ここまで一回手動でやっておく必要があります. そうしないで初めからQtCreatorでやろうとすると,実行時に以下のパスを見に行こうとします. `~/catkin_ws/build/devel` んなディレクトリねーよ!相当ハマりましたw.ツールからは設定しようがありませんでした. カレントディレクトリで整合性が取れないためにこうなります.ROSでは,`catkin_make`を`~/catkin_ws`で行いますが,下記のツール設定でビルドするとどうしても`~/catkin_ws/build`になってしまいます. 後述しますが,まずはROSのワークスペースでビルド,その後QtCreatorでプロジェクトを開く.を死守する必要があります!何度ハマったことか…. #QtCreatorを設定 - 立ち上げたら右上のOpen Projectを選択します.</br> <a class="detailOn" href="http://blog-imgs-86.fc2.com/m/o/r/morimoridiary254/blog_import_568b66ec6d965.png" id="i13384133684"><img alt="Qt初期" src="http://blog-imgs-86.fc2.com/m/o/r/morimoridiary254/blog_import_568b66ec6d965.png" id="1438514178626" ratio="1.3836477987421383" style="border: none; height: 159px; width: 220px;" /></a> - ROS パッケージのCMakeLists.txt を選択する. ~/catkin_ws/src/パッケージ名/CMakeLists.txt あたりになるはず.<br /> <a class="detailOn" href="http://blog-imgs-86.fc2.com/m/o/r/morimoridiary254/blog_import_568b66ecd67fc.png" id="i13384134191"><img alt="Qt選択" src="http://blog-imgs-86.fc2.com/m/o/r/morimoridiary254/blog_import_568b66ecd67fc.png" id="1438514182948" ratio="1.2790697674418605" style="border: none; height: 172px; width: 220px;" /></a> - プロジェクト設定の"Default欄"を以下のディレクトリに変更するし,"Configure Project"を選択. `/home/ユーザ/catkin_ws/build`</br> <a class="detailOn" href="http://blog-imgs-86.fc2.com/m/o/r/morimoridiary254/blog_import_568b66eda3d56.png" id="i13384135671"><img alt="Qt初期設定" src="http://blog-imgs-86.fc2.com/m/o/r/morimoridiary254/blog_import_568b66eda3d56.png" id="1438514185221" ratio="1.3836477987421383" style="border: none; height: 159px; width: 220px;" /></a> - 何やら色々な処理が始まる.無事に終わればプロジェクトが開く.ツリー表示のルートが"Project"であればOK.</br> <a class="detailOn" href="http://blog-imgs-86.fc2.com/m/o/r/morimoridiary254/blog_import_568b66ede343d.png" id="i13384137992"><img alt="Qtプロジェクト初期" src="http://blog-imgs-86.fc2.com/m/o/r/morimoridiary254/blog_import_568b66ede343d.png" id="1438514186620" ratio="1.3496932515337423" style="border: none; height: 163px; width: 220px;" /></a> - ここが特定のワークスペース名の場合,手動catkin_makeからやり直したほうがいい.何か間違えている可能性あり.build, develフォルダを削除して,ワークスペース直下で`catkin_make`をした後に,QtCreatorからプロジェクトを選択しなおしてみること. - ビルド,実行の設定 - 左側のメニューから"Projects"選択. - ビルド.CMakeの項目だけ確認.下記のようになっていること. - CMakeDirectory: `/home/ユーザ名/catin_ws/build` - Cmake aruguments: `../src -DCMAKE_INSTALL_PREFIX=../install -DCATKIN_DEVEL_PREFIX=../devel -DCMAKE_BUILD_TYPE=Debug .` <a class="detailOn" href="http://blog-imgs-86.fc2.com/m/o/r/morimoridiary254/blog_import_568b66ee6f849.png" id="i13384149145"><img alt="QtBuild設定" src="http://blog-imgs-86.fc2.com/m/o/r/morimoridiary254/blog_import_568b66ee6f849.png" id="1438514254421" ratio="1.2429378531073447" style="border: none; height: 177px; width: 220px;" /></a> - 実行.上部DesktopのRunを選択.Runの項目だけ確認.</br> - Arguments: お好きにどうぞ.私の場合はROS Parameter でTopic名を変えたかった. - Working directory: /home/ユーザ名/catin_ws/devel/lib/ワークスペース名<br /> ※これは間違えないこと.<br /> <a class="detailOn" href="http://blog-imgs-86.fc2.com/m/o/r/morimoridiary254/blog_import_568b66eed541f.png" id="i13384153395"><img alt="QtRun設定" src="http://blog-imgs-86.fc2.com/m/o/r/morimoridiary254/blog_import_568b66eed541f.png" id="1438514214424" ratio="1.2429378531073447" style="border: none; height: 177px; width: 220px;" /></a><b><span style="font-size: 16px;"></span></b> #ビルド Ctrl+bでパッケージのビルド.<br /> その後コンソールから<br /> <pre class="brush: bash;"> $ rosrun ビルドしたパッケージ名 ノード名 </pre> で実行したら,ちゃんと動いている.タイムスタンプも新しくなっている. #おわりに 最初これでいいじゃね?って思って書いた方法だ全然ダメだった.そこから相当ハマって,ようやく正規の方法にたどり着く. 自動補完,デバッグ,相互参照もバッチシ.これで快適にROSの開発ができる!
新しい投稿
前の投稿
ホーム
登録:
投稿 (Atom)