坐标转换记录

一、坐标发送两种方式:

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);

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,958评论 19 139
  • 1 CALayer IOS SDK详解之CALayer(一) http://doc.okbase.net/Hell...
    Kevin_Junbaozi阅读 5,210评论 3 23
  • 曾经35岁似乎离我们很遥远,可是它已经一步步在向我们逼近。现在请大家思考一分钟,想象一下35岁的你是什么状态...
    仪琳阅读 304评论 1 1
  • 2018年4月15日下午,在科技馆三楼的“一家衣善”仓库整理和搬运——捐赠的旧衣物。 自从参加志...
    瑛瑛pmy阅读 191评论 0 0
  • 明天要值班,吃过晚饭,拉了一车的库存,从吃到用,爸妈送我,我开车。因为还在节日假期,高速公路仍然免费,从家到D一路...
    cora的生活手册阅读 216评论 0 0