美文网首页
坐标转换记录

坐标转换记录

作者: 囡囡虾米 | 来源:发表于2018-08-02 10:18 被阅读0次

    一、坐标发送两种方式:

    1、tftree发送;

    2、广播方式:(ros代码)

     static tf::TransformBroadcaster br;

     tf::Transform transform;

     transform.setOrigin( tf::Vector3(0.0, 3.0, 10.0) );

     tf::Quaternion q;

     ros::Time input_time = input->header.stamp;

     q.setRPY(0, 0, 0.0);

     transform.setRotation(q);

     br.sendTransform(tf::StampedTransform(transform, input_time, "velodyne", "global"));  //parent ,child

    其中sendTransform中第三个参数为父坐标,第四个参数为子坐标。

    二、坐标接收方式:

    1、直接查询方法:

    tf::StampedTransform transform2;

      try{

          tran->lookupTransform("/base_link", "/velodyne_32e_link",                                    //destination_frame, original_frame,

                                  ros::Time(0), transform2);

        }

        catch (tf::TransformException &ex) {

          ROS_ERROR("%s",ex.what());

          ros::Duration(1.0).sleep();

        }

      cout << transform2.getOrigin().x() << transform2.getOrigin().y() << transform2.getOrigin().z() <<endl;

    如果无坐标可收,会立即报error。

    2、通过waitForTransform接收坐标

    tran->waitForTransform("/global", "/velodyne", input_time, ros::Duration(10.0));

    其中第一个参数为destination_frame,第二个参数为original_frame。函数可设置等待接收时间,超过时间即报error。

    三、坐标接收后进行坐标转换。

    转换方法较多,点云转换如下:

    pcl_ros::transformPointCloud("/velodyne", *cloud, *newBox, *tran);

    其中第一个参数为目标坐标系,第二个参数为original pointcloud,第三个参数为 destination pointcloud。

    第四个参数为接收到的坐标,正变换、逆变换 都包含其中,如global跟velodyne坐标的相互转换如下:

    pcl_ros::transformPointCloud("/global", bBoxes[i], newBox, *tran);

    pcl_ros::transformPointCloud("/velodyne", visBBs[i], visEgoBB, *tran);

    相关文章

      网友评论

          本文标题:坐标转换记录

          本文链接:https://www.haomeiwen.com/subject/fvkjvftx.html