ROS:關於tf的探索(2)Writing a tf listener(Python)
在前面的教程中,我們創造了一個broadcaster去釋出烏龜的座標給tf,在本節中,將建立一個listener來使用tf。
1.如何建立一個listener
首先建立資原始檔,切換到包目錄下
roscd learning_tf
1.1程式碼
建立一個nodes/turtle_tf_listener.py的檔案,並將如下程式碼複製其中。
vim nodes/turtle_tf_listener.py
【vim編輯器:按i開始插入,編輯完成後,按 ESC,輸入“:wq”儲存退出】
#!/usr/bin/env python
import roslib
roslib.load_manifest('learning_tf' )
import rospy
import math
import tf
import geometry_msgs.msg
import turtlesim.srv
if __name__ == '__main__':
rospy.init_node('tf_turtle')
listener = tf.TransformListener()
rospy.wait_for_service('spawn')
spawner = rospy.ServiceProxy('spawn', turtlesim.srv.Spawn)
spawner(4, 2, 0 , 'turtle2')
turtle_vel = rospy.Publisher('turtle2/cmd_vel', geometry_msgs.msg.Twist,queue_size=1)
rate = rospy.Rate(10.0)
while not rospy.is_shutdown():
try:
(trans,rot) = listener.lookupTransform('/turtle2', '/turtle1', rospy.Time(0))
except (tf.LookupException, tf.ConnectivityException, tf.ExtrapolationException):
continue
angular = 4 * math.atan2(trans[1], trans[0])
linear = 0.5 * math.sqrt(trans[0] ** 2 + trans[1] ** 2)
cmd = geometry_msgs.msg.Twist()
cmd.linear.x = linear
cmd.angular.z = angular
turtle_vel.publish(cmd)
rate.sleep()
使Python檔案可執行
chmod +x nodes/turtle_tf_listener.py
1.2程式碼解釋
import tf
tf包使得tf.TransformListener可實現,使接收變換的任務更加容易。
listener = tf.TransformListener()
這裡,我們建立一個tf.TransformListener物件。 一旦listener被建立,它開始接收tf轉換通過線,並緩衝它們長達10秒。
rate = rospy.Rate(10.0)
while not rospy.is_shutdown():
try:
(trans,rot) = listener.lookupTransform('/turtle2', '/turtle1', rospy.Time(0))
except (tf.LookupException, tf.ConnectivityException, tf.ExtrapolationException):
continue
到這裡,真正的工作做完了,我們通過 lookupTransform 向listener詢問到了特定的轉換,讓我們來看以下都有哪些引數:
我們想讓轉換從這個框架...
... 到這個框架.
我們想要轉換的時間。 提供rospy.Time(0)只會得到我們最新的可用變換。
所有這些都包裹在try-except塊中以捕獲可能的異常。
2.執行listener
用編輯器開啟start_demo.launch檔案,新增下面的語句
<launch>
...
<node pkg="learning_tf" type="turtle_tf_listener.py"
name="listener" />
</launch>
執行下面的語句即可看到兩隻烏龜。
roslaunch learning_tf start_demo.launch
3.檢查結果
通過控制方向鍵來控制一隻烏龜運動,可以看到另一隻烏龜在追隨所控制的烏龜。
相關推薦
ROS:關於tf的探索(2)Writing a tf listener(Python)
在前面的教程中,我們創造了一個broadcaster去釋出烏龜的座標給tf,在本節中,將建立一個listener來使用tf。 1.如何建立一個listener 首先建立資原始檔,切換到包目錄下 roscd learning_tf 1.1程式碼
Docker 1.12新功能探索(2):新增重大特性
Docker版本的1.12,仔細看來確實有了不少的變化,作為一個小版本號的升級能有如此之多的功能更新可能確實會讓不少追隨者喜出望外。1.12就能如此了,讓人不由得好奇docker到2.0的時候
ROS探索(2)——模擬器的搭建
Rviz是ROS中常用的顯示機器人實體的3D工具,但本身不具備模擬功能,因此需要安裝一個模擬工具“ arbotix ” 安裝arbotix: sudo apt-get install ros-<Your Version>-arbotix 例如:sudo ap
Linux基礎系列:常用命令(2)
用戶和組 查看 -- tdi 作業二 其他 配置文件 解鎖 gid 1 作業一: 2 1) 新建用戶natasha,uid為1000,gid為555,備註信息為“master” 3 groupadd -g 555 natasha 4 useradd -u
C#:執行緒(2):建立執行緒
一:建立新執行緒 在C#裡,執行緒是一種已經定義好的類,其被定義在System.Threading名稱空間內,因此建立新執行緒和我們例項化物件並沒有本質的差別。在這裡,用一個最簡單的例子說明如何建立新執行緒。 (一):建立新的控制檯程式,在控制檯程式的主函式下面,寫一個希望在新執行緒中呼叫的
C#:撲克牌遊戲(2):給CardLib新增Cards集合
(一):背景 在上一篇文章中,我們簡單建立了幾個可能在後面會用到的類並且放到了一個類庫中,接下來需要對這幾個類進行進一步的思考。首先一個問題是,我們原先在Deck類中,使用了一個數組來代表一副牌,但是我們知道,在一個撲克牌遊戲中,(例如鬥地
Tensorflow之MNIST手寫數字識別:分類問題(2)
整體程式碼: #資料讀取 import tensorflow as tf import matplotlib.pyplot as plt import numpy as np from tensorflow.examples.tutorials.mnist import input_data mnis
《零基礎入門學習Python》(43)魔法方法:算術運算(2)
前言: 上節課我們介紹了很多關於計算的魔法方法,當你的物件進行了相關的算術操作的時候,自然而然就會觸發相應的魔法方法,一旦你重寫了這些魔法方法,那麼Python就會根據你的意圖進行計算。 通過對相關的魔法方法進行重寫,可以讓Python根據你的意圖執行程式。 這裡我們就讓加變成減 &
(二)網路程式設計:聊天室(2)
第五步:既然是聊天室,那麼僅僅只能一個使用者自己和自己聊天,顯然該該程式是有瑕疵的。那麼我們就需要支援多使用者同時線上聊天。這一步中,我們就需要用到多執行緒的概念。為什麼要用到多執行緒?執行緒可以通俗的理解為每有一個新運動員便多建造一條跑道,以便所有運動員可以經歷同樣的從頭到尾的全部過程。那如果放到
Pytorch第二課:package-torch(2) 之數學操作
微博:https://weibo.com/wangxiaocaoai/profile?rightmod=1&wvr=6&mod=personinfo 微信公眾號:搜尋"AI躁動街" 本節要點: 1 逐點計算操作 2 縮減操作 3 比較操作 4 其
資料探索(2)資料特徵分析
資料特徵分析 分佈分析 1.定量資料的分佈分析 對於定量變數而言,選擇組數和組寬是做頻率分佈分析時最主要的問題,一般按照以下步驟進行。 1)求極差 2)決定組距和組數 3)決定分店 4)列出頻率分佈表 5)繪製頻率分佈直方圖 遵循以下原則: 1)各組之間必須相互排斥 2)各組
Esper學習筆記四:EPL語法(2)
1.select 查詢所有屬性或特定屬性 EPL的select和SQL的select很相近,SQL用*表示查詢表的所有欄位,而EPL用*表示查詢事件流的所有屬性值。SQL查詢某個欄位名,直接在select後跟欄位名就ok,EPL也是將要查詢的屬性名放在select之後。若查多個屬
大資料ETL實踐探索(2)---- python 與aws 互動
文章大綱 本文主要使用python基於oracle和aws 相關元件進行一些基本的資料匯入匯出實戰,oracle使用資料泵impdp進行匯入操作,aws使用awscli進行上傳下載操作。本地檔案上傳至aws es,spark dataframe錄
一套程式碼小程式&Web&Native執行的探索(2)
接上文:一套程式碼小程式&Web&Native執行的探索01,本文都是一些探索性為目的的研究學習,在最終版輸出前,內中的內容可能會有點亂 參考: https://github.com/fastCreator/MVVM https://www.tangshuang.net/3756.html
《組合語言(第3版)(王爽 著)》學習筆記二:基礎知識(2)
1.7 CPU 對儲存器的讀寫 以上講到,儲存器被劃分成多個儲存單元,儲存單元從零開始編號。這些編號可以看作儲存單元在儲存器中的地址。就想一條街,每個房子都有門牌號碼。 CPU 要從記憶體中讀資料,
Java:物件導論(2) 物件的儲存地址
上一節提到,用引用操作物件,引用的是物件的地址。那麼物件的“真身”放置在什麼地方呢? 在java程式執行時,有五個不同的地方可以儲存資料。 **1)暫存器。**這是最快的儲存區,因為他不同於其他的儲存,它位於處理器內部。但是暫存器的數量及其有限,所以需要根據需求
函式程式設計實驗四:列表練習(2)
{- 吳坎 17341163 [email protected] 資料科學與計算機學院計算機專業 -} {- 稱一個三元組(x,y,z)是畢達哥拉斯三元組,如果x*x + y*y == z*
Java面試系列總結 :JavaSE基礎(2) 常用 API
1. Math.round(11.5)等於多少?Math.round(- 11.5) 又等於多少? Math.round(11.5)的返回值是 12,Math.round(-11.5)的返回值是-11。 四捨五入的原理是在引數上加 0.5然後進行取整。 2.
【2019春招準備:106.storm(2)】
3.storm周邊框架 ZooKeeper(zookeeper.apache.org) 可以再cdh5上面下載(話說這個網站好強大) 安裝zookeeper到hdp3 啟動server端和cli端 可以在cli help ls(檢視zookeeper的檔案系
C 語言返璞歸真: 指標篇(2)
前言 上篇博文講到 C 語言指標的基本使用(宣告和初始化以及解引用), 對指標有了基本的瞭解之後,就來說說指標的一個曖昧物件——陣列。 陣列是什麼? 陣列是幾乎所有程式語言都有的一種型別,