2013年6月23日日曜日

マッピングできない

http://www.ist.tugraz.at/robotics/bin/view/Main/Poineer_mapping

マッピングするためには以下の変換が必要

1./base_linkと/laser
2./base_footprintと/base_link
3./odomと/base_footprint

上記の変換をするためには以下のようにして変換しなければならない

/odom --> /base_footprint --> /base_link --> /laser


●実際は以下のように変換する

//○変換:/base_link --> /laser
    tf::Quaternion laserQ;
    laserQ.setRPY(0.0, 0.0, 0.0);
    tf::Transform txLaser =  tf::Transform(
                        laserQ,
                        tf::Point(0.034, 0.0, 0.250)
                        );
    tf.sendTransform(
            tf::StampedTransform(
                        txLaser,
                        ros::Time::now(),
                        "base_link",
                        "laser"
                        )
            );
   
//○変換:/base_footprint --> /base_link
    tf::Transform txIdentity(
                tf::createIdentityQuaternion(),
                tf::Point(0.0, 0.0, 0.0)
                );
    tf.sendTransform(
            tf::StampedTransform(
                        txIdentity,
                        ros::Time::now(),
                        "base_footprint",
                        "base_link")
                        );
   
//○変換:/odom --> /base_footprint
    tf::Quaternion odomQ;
    tf::quaternionMsgToTF(
                position.pose.pose.orientation,
                odomQ
                );<b>map_saver</b>
    tf::Transform txOdom(
                odomQ, tf::Point(
                        (double) pos.getX()/1000.0,
                        (double) pos.getY()/1000.0,
                        pos.getTh()
                        )
                );
    tf.sendTransform(
            tf::StampedTransform(
                        txOdom,
                        ros::Time::now() ,
                        "odom",
                        "base_footprint")
                        );


※Quatarnionについて
http://www.bulletphysics.com/Bullet/BulletFull/classbtQuaternion.html
仕様が変わってるらしい


○また、上記の変換は以下のようにして端末上で変換することも出来る
$ rosrun tf static_transform_publisher 0.034 0.0 0.250 0.0 0.0 0.0 /base_link /laser 100
$ rosrun tf static_transform_publisher 0.0 0.0 0.0 0.0 0.0 0.0 /base_footprint /base_link 100


○これでいけるかやってみた
$ roslaunch openni_launch openni.launch
$ rosrun depthimage_to_laserscan depthimage_to_laserscan image:=/camera/depth/image_raw
$ rosrun rviz rviz
でlaserscanデータを取得
$ rosrun ROSARIA RosAria
$ rosrun tf static_transform_publisher 0.034 0.0 0.250 0.0 0.0 0.0 /base_link /laser 100
$ rosrun tf static_transform_publisher 0.0 0.0 0.0 0.0 0.0 0.0 /base_footprint /base_link 100
$ rosrun ROSARIA theo.key

で、あとはデータを取得

$ rosbag record -a
$ rosparam set use_sim_time true
$ rosrun gmapping slam_gmapping
$ rosbag play .....................bag
$ rosrun map_server map_saver

ちなみに$ rosrun gmapping slam_gmappingした端末では、以下のような警告が
ここに書いてる
http://www.ros.org/wiki/navigation/Troubleshooting


[ WARN] [1371981822.770704891]: TF_OLD_DATA ignoring data from the past for frame /base_link at time 1.37198e+09 according to authority /play_1371981806796107282
Possible reasons are listed at
[ WARN] [1371981822.770915036]: TF_OLD_DATA ignoring data from the past for frame /camera_depth_frame at time 1.37198e+09 according to authority /play_1371981806796107282
Possible reasons are listed at
[ WARN] [1371981822.771151442]: TF_OLD_DATA ignoring data from the past for frame /camera_rgb_optical_frame at time 1.37198e+09 according to authority /play_1371981806796107282
Possible reasons are listed at

うーん

マップ出来ない
上手く行ったらmy_lab_map.yamlmy_lab_map.pgmが生成されるらしいけど
できていない 
rosbagでgmappingに必要なデータが取得できていないのだろう
後一歩のところで届いてないみたいな

今回のリンクはとても参考になった
グラフ






0 件のコメント:

コメントを投稿