ros tf

研究ros tf的使用

这两篇篇文章说的蛮好的这篇是概念上的
这篇是数学上的解释
安装参看tf introduction

view frames会生成frames.pdf,打开pdf可以查看坐标系关系

rosrun tf view_frames

也可以直接使用rqt_tf_tree查看

rosrun rqt_tf_tree rqt_tf_tree

两个坐标系之间的关系可以用tf_echo查看

rosrun tf tf_echo [reference_frame] [target_frame]

T的第一个坐标系是reference,第二个是target

Tturtle1_turtle2=Tturtle1_worldTworld_turtle2

标定后发布机器人和相机的关系可以用static publisher
最后一个是周期,周期越小频率越高

rosrun tf static_transform_publisher x y z qx qy qz qw frame_id child_frame_id  period_in_ms

如果要放到launch中

<launch>
<node pkg="tf" type="static_transform_publisher" name="link1_broadcaster" args="1 0 0 0 0 0 1 link1_parent link1 100" />
</launch>

创建一个包

catkin_create_pkg learning_tf tf roscpp rospy turtlesim

创建发布

static tf::TransformBroadcaster br;

发布的变换

  tf::Transform transform;
  transform.setOrigin( tf::Vector3(msg->x, msg->y, 0.0) );
  tf::Quaternion q;
  q.setRPY(0, 0, msg->theta);
  transform.setRotation(q);

发送变换

 br.sendTransform(tf::StampedTransform(transform, ros::Time::now(), "world", turtle_name));

四个参数的解释
第一个就是transform
时间戳是当前时间
父坐标系
子坐标系
其实就是world到turtle的坐标系变换,也是turtle在world中的描述
Note: sendTransform and StampedTransform have opposite ordering of parent and child.

接收transform

 tf::TransformListener listener;
tf::StampedTransform transform;
    try{
      listener.lookupTransform("/turtle2", "/turtle1",
                               ros::Time(0), transform);
    }
    catch (tf::TransformException &ex) {
      ROS_ERROR("%s",ex.what());
      ros::Duration(1.0).sleep();
      continue;
    }

lookup第一个参数是target frame, 第二个参数是source frame,这里不是很懂,从代码和实际情况来看,查询的是turtle2到turtle1的变换,ros::Time(0)是最新的坐标系,存储到transform中。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值