ros tf 和Time

参照文献:
https://www.ncnynl.com/archives/201702/1313.html

TF和Time

**1、在前面的教程中,我们了解了tf如何跟踪坐标系树。**
此树随时间变化,tf存储每个变换的时间快照(默认情况下最多为10秒)。
直到现在,我们使用lookupTransform()函数来获取该tf树中最新的可用变换,而不知道什么时候记录变换。

try{
listener.lookupTransform("/turtle2", “/turtle1”,
ros::Time(0), transform);

2、 改变获取当前时间的变换,即改为now(), 修改代码:

try{
listener.lookupTransform("/turtle2", “/turtle1”,
ros::Time::now(), transform);

lookupTransform()函数提示失败:

[ERROR] [1287871653.885277559]: You requested a transform that is 0.018 miliseconds in the past, but the most recent transform in the tf buffer is 7.681 miliseconds old.
When trying to transform between /turtle1 and /turtle2.

这是为什么? 每个监听器有一个缓冲区,它存储来自不同tf广播者的所有坐标变换。 当广播者发出变换时,变换进入缓冲区之前需要一些时间(通常是几个毫秒)。 因此,当您在时间“now”请求坐标系变换时,您应该等待几毫秒以获得该信息。

等待变换

tf提供了一个很好的工具,它将等待,直到变换可用。
修改代码为:

try{
ros::Time now = ros::Time::now();
listener.waitForTransform("/turtle2", “/turtle1”,
now, ros::Duration(3.0));
listener.lookupTransform("/turtle2", “/turtle1”,
now, transform);

waitForTransform() 四个参数:
    1.需要等待变换从坐标系turtle2
    2.到坐标系turtle1
    3.在now时间
    4.超时时间,不要等待超过此最大持续时间

注意:使用ros::Time::now()是为了这个例子。通常这将是希望被转换的数据的时间戳。

所以waitForTransform()实际上会阻塞直到两个海龟之间的变换可用(这通常需要几毫秒)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值