<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 8.1 認識TF ### 8.1.1 簡介 TF是一個ROS世界里的一個基本的也是很重要的概念,所謂TF(TransForm),就是坐標轉換.在現實生活中,我們做出各種行為模式都可以在很短的時間里完成,比如拿起身邊的物品,但是在機器人的世界里,則遠遠沒有那么簡單.觀察下圖,我們來分析機器人拿起身邊的物品需要做到什么,而TF又起到什么樣的作用. ![](https://img.kancloud.cn/aa/9a/aa9acbd16cb29a40f42276e8e05e5a05_821x794.png) 觀察這個機器人,我們直觀上不認為拿起物品會又什么難度,站在人類的立場上,我們也許會想到手向前伸,抓住,手收回.就完成了這整個一系列的動作.但是如今的機器人遠遠沒有這么智能,它能得到的只是各種傳感器發送回來的數據,然后它再處理各種數據進行操作,比如手臂彎曲45度,再向前移動20cm等這樣的各種十分精確的數據,盡管如此,機器人依然沒法做到像人類一樣自如的進行各種行為操作.那么在這個過程中,TF又扮演著什么樣的角色呢?還拿該圖來說,當機器人的"眼睛"獲取一組數據,關于物體的坐標方位,但是相對于機器人手臂來說,這個坐標只是相對于機器人頭部的傳感器,并不直接適用于機器人手臂執行,那么物體相對于頭部和手臂之間的坐標轉換,就是TF. 坐標變換包括了位置和姿態兩個方面的變換,ROS中的tf是一個可以讓用戶隨時記錄多個坐標系的軟件包。tf保持緩存的樹形結構中的坐標系之間的關系,并且允許用戶在任何期望的時間點在任何兩個坐標系之間轉換點,矢量等. ### 8.1.2 ROS中的TF tf的定義不是那么的死板,它可以被當做是一種標準規范,這套標準定義了坐標轉換的數據格式和數據結構.tf本質是樹狀的數據結構,所以我們通常稱之為**"tf tree"**,tf也可以看成是一個topic:`/tf`,話題中的message保存的就是tf tree的數據結構格式.維護了整個機器人的甚至是地圖的坐標轉換關系.tf還可以看成是一個package,它當中包含了很多的工具.比如可視化,查看關節間的tf,debug tf等等.tf含有一部分的接口,就是我們前面章節介紹的roscpp和rospy里關于tf的API.所以可以看成是話題轉換的標準,話題,工具,接口. ![](https://img.kancloud.cn/6e/4f/6e4f233953a36b5947e98daa7989f93f_525x438.png) 觀察上圖,我們可以看到ROS數據結構的一個抽象圖,ROS中機器人模型包含大量的部件,這些部件統稱之為**link**,每一個link上面對應著一個**frame**, 即一個坐標系.link和frame概念是綁定在一起的.像上圖pr2模型中我們可以看到又很多的frame,錯綜復雜的鋪置在機器人的各個link上,維護各個坐標系之間的關系,就要靠著tf tree來處理,維護著各個坐標系之間的聯通.如下圖: ![](https://img.kancloud.cn/d5/e3/d5e343152cd965edd66ca66e876a66fd_1920x1080.png) 上圖是我們常用的robot_sim_demo運行起來的tf tree結構,每一個圓圈代表一個frame,對應著機器人上的一個link,任意的兩個frame之間都必須是聯通的,如果出現某一環節的斷裂,就會引發error系統報錯.所以完整的tf tree不能有任何斷層的地方,這樣我們才能查清楚任意兩個frame之間的關系.仔細觀察上圖,我們發現每兩個frame之間都有一個broadcaster,這就是為了使得兩個frame之間能夠正確連通,中間都會有一個Node來發布消息來broadcaster.如果缺少Node來發布消息維護連通,那么這兩個frame之間的連接就會斷掉.broadcaster就是一個publisher,如果兩個frame之間發生了相對運動,broadcaster就會發布相關消息. 
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看