りさーちゃーのたまご

りさーちゃーのたまご

研究者になり損ねた社会人のつれづれ日記です。へっぽこソフトしかかけないけど、社会人研究職を目指します。
適当なソフト、語学(英語、中国語)、マラソン、旅行、ときどき小言。

Amebaでブログを始めよう!
標記のとおりです.
諸々の利便性を考えて,Blogerに引っ越しました.

一応全記事を新ブログに引き継ぎましたが,一応こちらは消さないで残しておきます.

特に気にならない新ブログタイトルは「りさーちゃーのひよこ」です.
→リンク: りさーちゃーのひよこ

本ブログ開始当初は「たまご」だったわけで,いい加減「ひよこ」に昇進(!?)してもバチは当たらないだろうということで.

まぁ,昇進してもなお「ひよっこ」ではあるが.

成長が遅い鳥ですが,いつか伸び伸びと羽ばたける日が来ることを願いつつ,相も変わらず対して生産的でもない記事を残していこうと思います.

【はじめに】
タイトルの通り.
もう少し言うと,gazebo でロボット動かした後に一旦終了させて,画像処理のプログラム回して下記のコマンドを実行.
$ rosbag record /camera_info /image_raw -O images.bag
的なことをしたら,
use_sim_time set to true and no clock published.  Still waiting for valid time...
とか言われて「ふむ」という話である.

【やること】
もう一回gazebo でロボットのシミュレータを立ち上げてからrosbag をすればいい.
以上.

要は,/clock トピックはあるのに何にも入ってこないということで.
実際,
$ rostopic echo /clock
と打てばpublish されているかどうかが確認できる.

一回gazebo を立ち上げて,コンソールからCtrl+C で終了させた後に
$ rostopic list
をすると,gazebo の発行したトピックやら設定やらが残っているようである.

素人の我輩にはよくわからぬが,とりあえず使えればいいです笑.
そのうちどこかで見えてくるでしょう.
【はじめに】
ふとしたことからARToolKitを導入しようと思ったのですが,ネット上の情報が余りにも散乱している.(いつものことだが...)
チュートリアルがチュートリアルになっていない.
てなわけで,解説がないと忘れてしまう自分のためにメモを残しておくといういつものパターン.

【ARToolKitのインストール】
本丸くんを入れる前に,いくつかやっておくべきことがあります.
ROS.org- ar_tools を参考にしましたが,つまづいたので段階的に導入.

■ROS用のARToolKit のパッケージを探す
roslocateがなければインストール
$ roslocate info ar_tools
出力は以下のようになります.
- git:
    local-name: ar_tools
    uri: https://github.com/ar-tools/ar_tools.git
    version: master

■上記パッケージをローカルにダウンロード
○wstool がなければインストール

○初期化.~/catin_ws/src/.rosinstall が作成されます.
$ wstool init ~/catin_ws/src

○取得
$ cd ~/catin_ws
$ wstool set --target-workspace=src ar_tools --git https://github.com/ar-tools/ar_tools.git

○更新
$ wstool update ar_tools --target-workspace=src ar_tools

■パッケージのインストールとビルド
$ rosdep install -i --from-paths ar_tools
$ cd ~/catin_ws
$ catkin_make

【uvc_camera パッケージのインストール
サンプルとしてar_pose を使いたいので,
~/catkin_ws/src/ar_tools/ar_pose/launch/README.md
を覗いてみると, uvc_camera driver が必要とのこと.
チュートリアルを見てもさっぱりわからなかったので,ネットの海をさまよってこちらのサイトを見つける
 →Using ROS Indigo with a Webcam by the uvc_camera (USB Video Class) package

■パッケージの取得・インストール・ビルド
○取得
$ cd ~/catkin_ws/src/
$ git clone https://github.com/ktossell/camera_umd.git
○インストール
$ rosdep install camera_umd uvc_camera jpeg_streamer
○ビルド
$ cd ~/catkin_ws
$ catkin_make #build the workspace

■依存モジュール追加
$ sudo apt-get install libv4l-dev

■動作確認
$ roscd uvc_camera/launch/
$ roslaunch ./camera_node.launch
$ rosrun image_view image_view image:=image_raw

【ar_poseの動作のための準備
■サンプル用launchファイルの編集
~/catkin_ws/src/ar_tools/ar_pose/launch/ar_pose_single.launch
を確認する.注意すべき点を挙げます.
○カメラの設定
  <node ns="camera" pkg="uvc_camera" type="uvc_camera_node" name="uvc_camera" output="log">
内の
    <param name="device" type="string" value="/dev/video0" />
を,認識されているカメラの名前に合わせること.

○マーカの設定
  <node name="ar_pose" pkg="ar_pose" type="ar_single" respawn="false"
    output="screen">
内の,
    <param name="marker_pattern" type="string"
      value="$(find ar_pose)/data/patt.hiro"/>
を,認識対象のマーカに合わせること.

■カメラキャリブレーション
こちらを参照
 → ROS.org - camera_calibrationTutorialsMonocularCalibration
~/catkin_ws/src/ar_tools/ar_pose/launch/ar_pose_single.launch
では,キャリブレーションパラメータを yaml 形式で渡す必要があります.
まずはキャリブレーションせねば汗.
○キャリブレータの導入
$ cd ~/catkin_ws
$ rosdep install camera_calibration
$ catkin_make

○キャリブレータの起動
・まずはカメラが動いていることを確認./image_raw がトピックでいるはず.
$ rostopic list

・動いていなければ実行.
$ roslaunch uvc_camera camera_node.launch

・いよいよ起動
rosrun camera_calibration cameracalibrator.py --size 11x7 --square 0.02 image:=/image_raw
ここで,キャリブレーションボードはPTAMのボードを使います.
GitHub - ethz-asl/ethzasl_ptam
の/ptam/calib_pattern.pdf を使用しました.
11x7 はキャリブレーションボードの格子点の数,0.02[m] (=2cm) は正方形格子の一辺の長さです.

○キャリブレーション
色々な角度で撮りまくる.勝手にキャプチャしてくれる.
40枚くらい撮り終わると,CALIBLATE ボタンが有効になるので,ポチる.

しばらく待つ.1, 2分かかることもある.応答がなくなりグレーアウトしても,待つ.

■キャリブレーションファイルを yaml 形式に変換
まだ終わりません汗.
こちらを参照
 → camera_calibration_parsers
○キャリブレーションファイル保存
計算が終わると SAVE ボタンが有効になるので,保存.
デフォルトで /tmp/calibrationdata.tar.gz  に保存される.

解答して,中身の ost.txt を ~/catin_ws/src/camera_umd/uvc_camera に移動.

○ファイル変換
$ mv ost.txt ost.ini
$ rosrun  camera_calibration_parsers convert  ost.ini camera_calibration.yaml

この名前にしておけば,
~/catin_ws/src/ar_tools/ar_pose/launch/ar_pose_single.launch
内の,
    <param name="camera_info_url" type="string"
      value="file://$(find uvc_camera)/camera_calibration.yaml" />
との整合性がそのまま取れます.

【ar_poseの動作確認
■実行
$ roslaunch ar_pose ar_pose_single.launch

artoolkit

ようやくここまで来た...
キャリブレーション yaml ファイルがないと,ここで怒られちゃうので,ちゃんとキャリブレーションしておきましょう.

【おわりに
どんだけやらせんだよw 超大変だったし!Wiki のチュートリアルがチュートリアルになってない!w
まぁ,動いたからよしとしましょう.勉強になりました.

ひとまずこれで tf に認識結果を出力できるようになりましたとさ.めでたしめでたし.