ROS 機器人技術 - TF 坐標系統基本概念

2021-02-21 登龍

項目寫 ROS 語義融合節點需要使用 TF 坐標,這裡記錄下我學習下 TF 包的筆記。

一、TF 和 TF2 是什麼?1.1 TF

ROS TF 是一個可以讓機器人隨著時間跟蹤坐標系之間變換關係的功能包。

TF 的內部是樹形結構,內部的坐標系變換通過緩衝區維護,可以讓用戶在任意時間將點、向量等數據的坐標在不同的坐標系中變換。

我們知道一個機器人系統通常含有多個隨著時間變化的 3D 坐標系(coordinate frames),比如常見坐標系如下:

TF 包的作用就是隨著時間的變化跟蹤這些坐標系,並且用戶可以訪問過去和現在的一些坐標變換,比如:

5 秒前,機器人頭部坐標系相對於世界坐標系的變換關係是怎樣的?機器人的爪子夾取的物體相對於機器人中心坐標系的位置在哪裡?

並且 TF 系統在 ROS 中是分布式的,意思是一個 ROS 系統中廣播的所有坐標系變換關係對於所有的 ROS 節點都是可用的。

每個訂閱了 TF 消息的節點都會緩衝一份當前機器人所有坐標系的變換關係,使得坐標變換非常方便。

比如你定好了機器人的雷達和相機的相對位置,並且標定的他們的坐標關係,那麼通過在 ROS 中用 TF 廣播雷達和相機的坐標關係,然後所有節點都可以使用你發布的這個變換。

TF:

http://wiki.ros.org/tf

1.2 TF2

自從 ROS Hydro 版本發布後,ROS 官方就棄用了 TF 包,轉而用第二代的 TF2 代替。

TF2 完全兼容第一代的 TF,並且 TF2 接口更清晰,更加容易使用,官方也建議最新的工作使用 TF2 系統。

所以大家現在創建的項目使用最新的 TF2 就可以了,完全兼容 TF的。

TF2:

http://wiki.ros.org/tf2

以下我就用 TF 代表 TF2 了哈。

二、使用 TF 系統的 2 個重要步驟

ROS 官方給了使用 TF 系統的 2 個重要步驟,每個使用 TF 的同學都應該提前知道這 2 步,跟發布和訂閱主題類似:

廣播 TF 變換:向 ROS 中廣播坐標系的相對變換關係,ROS 系統的不同部分都可以廣播坐標變換,不需要進行同步等操作。監聽 TF 變換:接收並緩存 ROS 系統中廣播的所有坐標系變換,並且可以查詢指定幀之間的坐標變換。

基本的 TF 概念就介紹完了,下面用個小烏龜跟隨的例子來看下 TF 系統到底做了什麼。

三、小烏龜帶你理解 TF 如何工作3.1 安裝並運行小烏龜

我們用官方的 Demo 來解釋 TF 系統,先來安裝 Demo:

sudo apt-get install ros-$ROS_DISTRO-turtle-tf2 ros-$ROS_DISTRO-tf2-tools ros-$ROS_DISTRO-tf

注意要把 $ROS_DISTRO 替換為你的 ROS 版本,比如 kinect:

sudo apt-get install ros-kinect-turtle-tf2 ros-kinect-tf2-tools ros-kinect-tf

安裝好後運行這個 demo,記得學習 ROS 環境搭建的基礎:

roslaunch turtle_tf2 turtle_tf2_demo.launch

運行出現 2 個經典的小烏龜:

切換到運行 roslaunch 的終端,按鍵盤的上下左右鍵移動小烏龜,會發現第二個白色小烏龜會跟隨第一個綠色小烏龜而運動:

3.2 分析小烏龜

上面這個例子中使用了 3 個坐標系:

turtle1 frame:第一個綠色小烏龜的坐標系turtle2 frame:第二個白色小烏龜的坐標系

在程序中使用 TF 廣播小烏龜之間的參考系,然後在監聽 TF 消息後計算 2 個烏龜的位置差,從而使得第二個烏龜跟隨第一個烏龜移動。

tf 提供了 view_frame 工具來查看系統當前廣播的 TF 變換:

rosrun tf2_tools view_frames.py

會生成一個 frames.pdf 文件:

Listening to tf data during 5 seconds...
Generating graph in frames.pdf file...

我們直接打開這個 pdf 文件:

evince frames.pdf

解釋下:

當前 TF 系統廣播了 3 個坐標系:world frame、turtle1 frame、turtle2 frameworld frame 是 turtle1 和 turtle2 的父坐標系節點除了坐標系的關係,還包括調試用的發送頻率,緩衝區長度,最新的和最早的轉換

還可以實時查看 ROS 系統中存在的 TF 變換:

rosrun rqt_tf_tree rqt_tf_tree

如下圖:圖片待補充

除了查看參考系的結構圖,TF 還提供一個能夠查看兩個坐標系相對變換的工具 tf_echo:

# 輸出 source_frame 到 target_frame 的坐標變換關係
# 或者 target_frame 相對於 source_frame 的坐標變換關係
rosrun tf tf_echo [source_frame] [target_frame]

turtle1 到 turtle2 的坐標變換公式如下,先把 turtle1 轉到 world 坐標系,再從 world 坐標系轉到 turtle2 坐標系:

我們來輸出第一個綠色烏龜到第二個白色烏龜的坐標變換:

rosrun tf tf_echo turtle1 turtle2

輸出類似下面的信息:

當你用上下左右鍵移動第一個烏龜,會發現上面的坐標輸出會隨之更新,裡面顯示了一些表示烏龜 2 相對於烏龜 1 的坐標(X, Y, Z)和旋轉角(四元數和歐拉角表示)。

3.3 使用 RVIZ 查看 TF 變換

我們可以使用 RVIZ 來直觀的查看系統當中的 TF 變換,啟動上面 demo 對應的 rviz 配置:

rosrun rviz rviz -d `rospack find turtle_tf2`/rviz/turtle_rviz.rviz

顯示如下,記得搜索下 Rviz 的基本用法哈,這裡滑動滑鼠滾輪可以放大查看,使用鍵盤移動小烏龜會發現坐標系也會隨之移動:

今天就寫這些,下期跟大家繼續分享 TF 的使用方法。


相關焦點

  • 2.tf在多機器人編隊中的應用
    它使用一種樹型數據結構,根據時間緩衝並維護多個參考系之間的坐標變換關係,可以幫助用戶在任意時間,將機器人中點、向量等數據的坐標,在兩個參考系中完成坐標變換。tf可以做什麼,一個機器人系統通常有很多三維的參考系,而且會隨著時間的推移發生變化。
  • ROS機器人作業系統實戰
    課程將不僅僅關注ROS,還會介紹不同階段下的機器人核心概念。這門課程和其他學生可以學習的課程不一樣,不僅僅是因為Dr.Rojas擁有多年的的ROS實際應用經驗,而且他的課程是精心設計的,能夠讓你更加系統地學習ROS。大多數ROS相關書籍和課程會通過一系列拼接起來的項目來教授ROS,儘管這個方法是有效的,但是學生們只能分批地學習中間件系統。
  • 開發者說丨ROS理論與實踐⑦:機器人導航
    總結下來,涉及的關鍵技術有如下五點:全局地圖自身定位路徑規劃運動控制環境感知機器人導航實現與無人駕駛類似,關鍵技術也是由上述五點組成,只是無人駕駛是基於室外的,而我們當前介紹的機器人導航更多是基於室內的。1.
  • 可能是國內最好的ROS課程之一——20節課程帶你入門ROS機器人作業系統
    本課程作者是易科機器人實驗室的zhangrelay博士,張老師有12年機器人系統仿真與控制學習和研究經歷,是機器人和人工智慧技術的愛好者。
  • 基於Arduino和ROS來創建更智能的機器人系統
    基於Arduino和ROS來創建更智能的機器人系統 風箏 發表於 2021-01-09 11:30:10 Arduino開發板經常用於製作一些小型的機器人,並具有簡單的邏輯定義控制。
  • 使用ros actionlib向機器人發送目標點
    當我們已有現成地圖的時候,ros的Navigation程序包可以根據已有地圖進行定位導航。其中的move_base程序包應用ros的actionlib機制接收全局目標點,進行路徑規劃,然後對移動機器人進行控制行進至目標點。本文將展示用c++和python如何應用actionlib來向move_base發送目標點。
  • ROS學習啟動
    目前在浙江大學攻讀機械電子專業博士學位,研究方向包括智能液壓元件及其控制,液壓伺服系統運動控制,智能工程機械。一,前言一直希望機器人隊能在一個更高的平臺基礎上做機器人比賽及機器人研究的相關工作,系統軟體算法上,ROS無疑是最佳的選擇,它能讓我們直接應用到世界上最新的機器人開發庫。下面的內容旨在幫助有興趣的人員啟動對ROS的學習。
  • ROS 機器人技術 - rosbag 詳細使用教程
    在 ROS 系統中,可以使用 bag 文件來保存和恢復系統的運行狀態,比如錄製雷達和相機話題的 bag 包,然後回放用來進行聯合外參標定。這裡記錄下我學習官方的 rosbag 教程的筆記:http://wiki.ros.org/rosbag/Commandline我常用的幾個操作雖然命令很多,但是我目前在工作中常用的命令就如下幾個:1.
  • 直角坐標機器人的概念及定義
    五、直角坐標機器人驅動元件——電機驅動系統  直線定位單元(系統)之所以能夠實現精確的運動定位,是由電機驅動系統決定的。  常用的驅動系統有:  交流/支流伺服電機驅動系統、步進電機驅動系統、直線伺服電機/直線步進電機驅動系統。
  • ros通信機制
    話題通信的應用場景也極其廣泛,比如下面一個常見場景:機器人在執行導航功能,使用的傳感器是雷射雷達,機器人會採集雷射雷達感知到的信息並計算,然後生成運動控制信息驅動機器人底盤運動。在上述場景中,就不止一次使用到了話題通信。以雷射雷達信息的採集處理為例,在 ROS 中有一個節點需要時時的發布當前雷達採集到的數據,導航模塊中也有節點會訂閱並解析雷達數據。
  • 如何在Gazebo裡仿真ROS機器人的SLAM建圖和導航
    所以,當攜帶雷射雷達的機器人在環境中運動時,它在某一個時刻,只能得到有限範圍內的障礙物的部分輪廓和其在機器人本體坐標系裡的相對位置。比如在下圖中,反映了一個機器人在相鄰比較近得A、B、C三個位置雷射雷達掃描到的障礙物輪廓。
  • 【知識】機器人自主定位導航 ROS是唯一選擇?
    隨著這兩年國內機器人的升溫,自主定位導航技術作為機器人智能化的第一步正不斷引起行業內的重視。為了實現這一功能,不少廠家選擇採用機器人作業系統ROS(Robot Operation System),今天我們就聊一聊ROS系統。  1.什麼是ROS?
  • ROS大神為你詳解:如何搞定Movidius神經計算棒基於ROS的實現與封裝
    機器人創新生態特邀Intel開源軟體技術中心專家,為你詳解基於 Movidius 神經計算棒的ROS開發包的功能及其使用方法(附全套代碼),幫助你輕鬆地將深度學習技術引入項目,和其他ROS節點無縫連接,為你的機器人裝上人工智慧的利器。   搞定實現與封裝後,能應用在哪些領域?
  • Matlab協調ROS程序: matlab 2015b + ros indigo
    你是否一直糾結ros程序的單步調試呢?你是否一直糾結ros中的具體數據流呢?
  • RTI公司推出增強版ROS 2支持,加速高擴展性機器人系統開發
    機器人軟體開發人員現在可以藉助於ROS 2生態系統和RTI-Connext工具更快速地開發、測試和調試分布式機器人系統。在11月12日舉辦的ROS World大會上,RTI公司將展出這套最新版的Connext RMW Layer。ROS 2為構建機器人系統提供了一個開源框架。RTI公司則是數據分發服務(DDS?)
  • 1.ROS2GO系統簡介
    但是擋在初學者面前的第一個難題就是如何在Ubuntu系統或其他系統上安裝ROS。好多初學者經常給我發消息說安裝ROS時出現各種問題,說安裝步驟太麻煩了、各種ros命令找不到。尤其是第一次使用linux系統的同學,唉,其實挺無奈的。因為我們的大學計算機教育一般大都是在Windows上教學的,導致各位同學對linux非常的陌生。
  • 菜鳥聊機器人-工業機器人坐標系
    想學好工業機器人就要熟悉機器人的控制,工業機器人基本靠控制運動軸位置和電磁元件通斷來進行運動。運動軸位置控制一般用來改變工具作業點,它可驅動機器人關節運動或機器人、工件的整體移動;在機器人應用程式中,運動軸位置可通過基本移動指令控制。基本移動指令屬於通用指令,只要機器人的控制系統相同,即使工業機器人的用途有所區別,但移動指令的格式、編程要求仍一致。
  • 工業機器人技術解密之——仿真技術在機器人系統中的應用
    工業機器人在現代製造系統中起著極其重要的作用。隨著機器人技術的不斷發展,機器人的三維仿真技術也隨之得到廣泛關注。   (1)啟帆工業機器人系統介紹   啟帆工業機器人系統主要由機器人本體、機器人控制器和機器人控制軟體三部分組成,如圖1所示。機器人控制系統是先通過示教器來操作運動控制器,運動控制器則通過EtherCAT通信向伺服驅動器發出指令來控制機器人六個軸分別運動,實現機器人的運動控制。
  • wsl2安裝ROS
    一、機器人作業系統 (ROS) 是編寫機器人軟體的靈活框架。
  • 【ROS機器人研發教程2】ROS學習筆記(一):自己動手寫一個ROS程序
    /indigo/share:/opt/ros/indigo/stacks  如果能看到自己工作區的文件路徑就說明已經成功了。而最基本ROS工程包中會包括CmakeLists.txt和Package.xml這兩個文件,其中Package.xml中主要包含本項目信息和各種依賴(depends),而CmakeLists.txt中包含了如何編譯和安裝代碼的信息。