iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 13
0
AI & Data

ROS新手挑戰AI&Data組系列 第 13

[ROS#12]TF 座標轉換

  • 分享至 

  • xImage
  •  

參考資料:
1. ROS探索總結(十八)——重讀tf
2. ROS :RViz中移動機器人來學習 URDF,TF,base_link, map,odom和odom 主題的關係
3. JETSON TK1_【L2】讓 ROS 幫你處理煩雜的座標轉換!
4. 大頭怪的異想空間_我知道我的手臂在哪裡嗎?那我的眼睛呢?

• TF package介紹
機器人系統通常具有隨時間變化的許多3D坐標框架,例如世界框架,基礎框架,抓手框架,頭部框架等。
tf隨時間跟蹤所有這些框架,也可以在分佈式系統中運行,這意味著有關機械手坐標系的所有信息可用於系統中任何計算機上的所有ROS組件。

#在機器人學中,相關的部位在空間中的關係,必須以座標系定位,每一個部位相對其他部位的連結,便可以看作是座標系和座標系之間的距離與角度關係。
如以下稱作Denavit-Hartenberg (DH)的模型來定義座標位置:
https://ithelp.ithome.com.tw/upload/images/20190927/20120406y4wTOzONYg.png
因為位置的座標是用 (x, y, z, roll, pitch, yaw) 這六個變數紀錄,手刻不太可能,因此ROS的框架中,已經有一大套相當完善的TF函式庫

從我們看的到的"姿態、方位"(位置),去算"平移、旋轉"(轉換)

  1. 姿態(Pose)是一個紀錄卡氏座標的陣列 [x, y, z]^T
  2. 方位(Orientation)是一個三圍陣列,裡面的元素分別為x 軸、y軸、z軸上的旋轉角度 [roll, pitch, yaw],其實這個術語,應該是承襲自航空學中的各種轉動角度。也就是: x軸上的轉動= roll, y軸上的轉動= pitch、 z軸上的轉動= yaw。
  3. 位置(Position)結合了姿態與方位,變成一個有六個元素的陣列,在機率機器人學中,也稱之為狀態(state),或組態(Configuration)。
    這六個變數,機器人學中,便稱其為六個自由度。所以,下次,看到有四旋翼的廣告文案上說,這台四旋翼有五個自由度,或者,一個視覺里程計(visual odometry)標榜即時的六個自由度定位,我們便能輕易知道在說什麼。
  4. 平移(translation)就是原本位置p(x,y, z)再加上某個定量。
  5. 旋轉矩陣(rotation matrix),一個向量大小不變,直接轉向的矩陣。
  6. 轉換矩陣(Transformation Matrix )便結合了旋轉與平移的關係,和寫成一個矩陣,將一個座標中的狀態以另一個坐標系來表示

• TF 應用解說
ROS探索总结(十二)——坐标系统ROS(九):座標系統tf
#大致步驟:

  1. 安装turtle包
    $ rosdep install turtle_tf rviz
    $ rosmake turtle_tf rviz 這句可不打,rosmake是幫助你確定整個package沒問題
  2. 運行(第二隻烏龜追著第一隻跑)
    $ roslaunch turtle_tf turtle_tf_demo.launch
  3. 分析(tf建立的三個參考座標)
    $ rosrun tf view_frames這個指令會產成一個像rqt-圖的pdf檔
    $ rosrun tf tf_echo turtle1 turtle2 這個指令會列出龜2座標相對龜1座標的轉換矩陣
    $ rosrun rviz rviz -d `rospack find turtle_tf`/rviz/turtle_rviz.vcg 這個指令就可以從rviz圖形介面看到三者間關係(世界、龜1、龜2)

#進階: (寫一個tf的廣播)
學習重點:
Topic 1 – Broadcaster : 報自己 Frame 的位置
Topic 2 – Listener:讓我看看你在哪
Topic 3 – Add a frame :參考點給你一個 Frame
Topic 4 – About Time:加進時間
Topic 5 – Time Travel:抓舊資料

  1. 創建包以及文件:/nodes/turtle_tf_broadcaster.py,還有launch文件start_demo.launch
  2. 寫tf listener(nodes/turtle_tf_listener.py)、修改launch文件
  3. 重新運行、分析(目前會跟基礎一樣有2隻烏龜)
  4. Adding a fixed frame(nodes/fixed_tf_broadcaster.py)、修改launch文件
  5. or change to a moving frame

#完整官方教程:

  1. tfTutorials
  2. tfTutorialsIntroduction to tf

上一篇
[ROS#11]Localization
下一篇
[ROS#13]Navigation
系列文
ROS新手挑戰AI&Data組30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言