時(shí)間關(guān)系
進(jìn)入軟件包
$ roscd learning_tf
現(xiàn)在我們將第二個(gè)海龜實(shí)時(shí)跟隨第一只海龜更改為第二只海龜隨著5s前的第一只海龜?shù)奈恢米摺?/p>
vim nodes/turtle_tf_listener.py
try:
now = rospy.Time.now() - rospy.Duration(5.0)
listener.waitForTransform("/turtle2", "/carrot1", now, rospy.Duration(1.0))
(trans, rot) = listener.lookupTransform("/turtle2", "/carrot1", now)
except (tf.Exception, tf.LookupException, tf.ConnectivityException):
當(dāng)運(yùn)行程序的時(shí)候癞尚,前5秒鐘第二只海龜不知去哪兒, 因?yàn)榍拔迕氲谝恢缓}敍]有記錄森渐。而5秒后可以試一下下面的程序:
$ make or catkin_make
$ roslaunch learning_tf start_demo.launch
- 看看是否示例中的海龜也如下圖一樣無需變化苹熏?事實(shí)上我們控制第二個(gè)海龜跟隨第一只海龜?shù)奈恢米摺?/li>
- 程序一直進(jìn)行的換算,第一個(gè)海龜5秒前的位置是多少咬荷,相對(duì)而言海龜2的位置是多少?
附件的 lookupTransform API
lookupTransform API清晰的展示了每個(gè)坐標(biāo)系的變換關(guān)系,代碼如下所示:
try:
now = rospy.Time.now()
past = now - rospy.Duration(5.0)
listener.waitForTransformFull("/turtle2", now,
"/turtle1", past,
"/world", rospy.Duration(1.0))
(trans, rot) = listener.lookupTransformFull("/turtle2", now,
"/turtle1", past,
"/world")
lookupTransform()擴(kuò)展API具有6個(gè)特性:
- 從參考坐標(biāo)系轉(zhuǎn)換到
- 在此時(shí)
- ... 到此目標(biāo)坐標(biāo)系
- 在這個(gè)時(shí)候.
- 指出不隨時(shí)間變換的坐標(biāo)系: "/world" 世界坐標(biāo)系
- 儲(chǔ)存結(jié)果的變量
注意 waitForTransform()具有基礎(chǔ)和擴(kuò)展的API就像lookupTransform()一樣盘榨。
檢查結(jié)果
運(yùn)行模擬器郊愧,時(shí)間變換的API:
$ roslaunch learning_tf start_demo.launch
第二個(gè)海龜跟著第一個(gè)海龜5秒后的軌跡走朴译。