SLAM+語音機器人DIY系列:(二)ROS入門——7.理解tf的原理


摘要                                          

ROS機器人操作系統在機器人應用領域很流行,依托代碼開源和模塊間協作等特性,給機器人開發者帶來了很大的方便。我們的機器人“miiboo”中的大部分程序也采用ROS進行開發,所以本文就重點對ROS基礎知識進行詳細的講解,給不熟悉ROS的朋友起到一個拋磚引玉的作用。本章節主要內容:

1.ROS是什么

2.ROS系統整體架構

3.在ubuntu16.04中安裝ROS kinetic

4.如何編寫ROS的第一個程序hello_world

5.編寫簡單的消息發布器和訂閱器

6.編寫簡單的service和client

7.理解tf的原理

8.理解roslaunch在大型項目中的作用

9.熟練使用rviz

10.在實際機器人上運行ROS高級功能預覽



7.理解tf的原理                          

1)機器人中的坐標系

一個機器人系統中通常會有多個三維參考坐標系,而且這些坐標系之間的相對關系隨時間推移會變化。這里舉一個實際的機器人應用場景例子,來說明這種關系和變化:

全局世界坐標系:通常為激光slam構建出來的柵格地圖的坐標系map

機器人底盤坐標系:通常為機器人底盤的坐標系base_footprint

機器人上各部件自己的坐標系:比如激光雷達、imu等傳感器自己的坐標系base_laser_linkimu_link

這些坐標系之間的關系有些是靜態的、有些是動態的。比如當機器人底盤移動的過程中,機器人底盤與世界的相對關系map->base_footprint就會隨之變化;而安裝在機器人底盤上的激光雷達、imu這些傳感器與機器人底盤的相對關系base_footprint->base_laser_linkbase_footprint->imu_link就不會隨之變化。其實,這個很好理解。

如圖25中,map->base_footprint會隨着底盤的移動而變化,即動態坐標系關系。

(圖25)動態坐標系關系

如圖26中,base_footprint->base_laser_linkbase_footprint->imu_link不會隨着底盤的移動而變化,即靜態坐標系關系。

(圖26)靜態坐標系關系

2)機器人坐標關系工具tf

由於坐標及坐標轉換在機器人系統中非常重要,特別是機器人在環境地圖中自主定位和導航、機械手臂對物體進行復雜的抓取任務,都需要精確的知道機器人各部件之間的相對位置及機器人在工作環境中的相對位置。因此ROS專門提供了tf這個工具用於簡化這些工作。

tf可以讓用戶隨時跟蹤多個坐標系的關系,機器人各個坐標系之間的關系是通過一種樹型數據結構來存儲和維護的,即tf tree。借助這個tf tree,用戶可以在任意時間將點、向量等數據的坐標在兩個坐標系中完成坐標值變換。

如圖27,為一個自主導航機器人的tf tree結構圖。圓圈中是坐標系的名稱,箭頭表示兩個坐標系之間的關系,箭頭上會顯示該坐標關系的發布者、發布速率、時間戳等信息。

(圖27)一個自主導航機器人的tf tree結構圖

3)使用tf

使用tf分為兩個部分,廣播tf變換、監聽tf變換。

廣播tf變換:

ROS網絡中的節點可以向系統廣播坐標系之間的變換關系。比如負責機器人全局定位的amcl節點會廣播map->odom的變換關系,負責機器人局部定位的輪式里程計計算節點會廣播odom->base_footprint的變換關系,機器人底盤上安裝的傳感器與底盤的變換關系可以通過urdf機器人模型進行廣播(urdf將在后面實際機器人中進行講解)。每個節點的廣播都可以直接將變換關系插入tf tree,不需要進行同步。通過多個節點廣播坐標變換的關系,便可以實現tf tree的動態維護。

關於廣播tf變換的具體程序實現,請直接參考ROS官方教程http://wiki.ros.org/tf/Tutorials

監聽tf變換:

ROS網絡中的節點可以從系統監聽坐標系之間的變換關系,並從中查詢所需要的坐標變換。比如要知道機器人底盤當前在柵格地圖坐標系下的什么地方,就可以通過監聽map->base_footprint來實現,比如要知道機器人底盤坐標系上的某個坐標點在世界坐標系下的坐標是多少,就可以通過監聽map->base_footprint,並通過map->base_footprint這個變換查詢出變換后的坐標點取值。

關於監聽tf變換的具體程序實現,請直接參考ROS官方教程http://wiki.ros.org/tf/Tutorials

后記                                          

------SLAM+語音機器人DIY系列【目錄】快速導覽------

第1章:Linux基礎

1.Linux簡介

2.安裝Linux發行版ubuntu系統

3.Linux命令行基礎操作

第2章:ROS入門

1.ROS是什么

2.ROS系統整體架構

3.在ubuntu16.04中安裝ROS kinetic

4.如何編寫ROS的第一個程序hello_world

5.編寫簡單的消息發布器和訂閱器

6.編寫簡單的service和client

7.理解tf的原理

8.理解roslaunch在大型項目中的作用

9.熟練使用rviz

10.在實際機器人上運行ROS高級功能預覽

第3章:感知與大腦

1.ydlidar-x4激光雷達

2.帶自校准九軸數據融合IMU慣性傳感器

3.輪式里程計與運動控制

4.音響麥克風與攝像頭

5.機器人大腦嵌入式主板性能對比

6.做一個能走路和對話的機器人

第4章:差分底盤設計

1.stm32主控硬件設計

2.stm32主控軟件設計

3.底盤通信協議

4.底盤ROS驅動開發

5.底盤PID控制參數整定

6.底盤里程計標

第5章:樹莓派3開發環境搭建

1.安裝系統ubuntu_mate_16.04

2.安裝ros-kinetic

3.裝機后一些實用軟件安裝和系統設置

4.PC端與robot端ROS網絡通信

5.Android手機端與robot端ROS網絡通信

6.樹莓派USB與tty串口號綁定

7.開機自啟動ROS節點

第6章:SLAM建圖與自主避障導航

1.在機器人上使用傳感器

2.google-cartographer機器人SLAM建圖

3.ros-navigation機器人自主避障導航

4.多目標點導航及任務調度

5.機器人巡航與現場監控

第7章:語音交互與自然語言處理

1.語音交互相關技術

2.機器人語音交互實現

3.自然語言處理雲計算引擎

第8章:高階拓展

1.miiboo機器人安卓手機APP開發

2.centos7下部署Django(nginx+uwsgi+django+python3)

----------------文章將持續更新,敬請關注-----------------

 

如果大家對博文的相關類容感興趣,或有什么技術疑問,歡迎加入下面的《SLAM+語音機器人DIY》QQ技術交流群,一起討論學習^_^

關於我們:

視頻教程:

 

https://www.bilibili.com/video/av61448040


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM