欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ROS??TF坐標(biāo)變換基本概念及使用案例

 更新時間:2023年01月03日 11:58:26   作者:K.Fire好好睡覺  
本文介紹了TF坐標(biāo)變換的基本概念以及TF在ROS中的表示形式,通過古月居的烏龜跟隨的例子,分析了TF樹的廣播器和監(jiān)聽器最基本的書寫形式,從中展示了如何提取和應(yīng)用TF變換的信息,并介紹了5種最常用的TF樹及TF信息的提取工具,感興趣的朋友一起學(xué)習(xí)下吧

前言

TF(TransForm),就是坐標(biāo)轉(zhuǎn)換,包括了位置和姿態(tài)兩個方面的變換,坐標(biāo)變換是機(jī)器人學(xué)中的概念。

在機(jī)器人學(xué)中,無論一個機(jī)器人多么復(fù)雜,我們都可以將它的組成抽象成兩部分-連桿和關(guān)節(jié),最典型的機(jī)器人是串聯(lián)型機(jī)械臂,它的每條臂就是一個比較規(guī)整的關(guān)節(jié),中間連接的電機(jī)就是它的關(guān)節(jié),關(guān)節(jié)分為轉(zhuǎn)動關(guān)節(jié)和移動關(guān)節(jié),比如下圖中比較經(jīng)典的PUMA機(jī)械臂,可以抽象成很規(guī)整的連桿和關(guān)節(jié)的組成。

在將機(jī)器人抽象成關(guān)節(jié)之后,我們就可以使用DH法或改進(jìn)DH法,為各個關(guān)節(jié)和連桿建立坐標(biāo)系,而坐標(biāo)變換就是用來描述我們建立的各個坐標(biāo)系之間的關(guān)系,以方便人們表達(dá)機(jī)器人各個關(guān)節(jié)之間的位置關(guān)系。

一、ROS中的TF

雖然我們可以將機(jī)器人進(jìn)行抽象和簡化,拋去它所有復(fù)雜的結(jié)構(gòu),將它抽象成一個個的坐標(biāo)系,但是一個機(jī)器人可能有幾十上百個關(guān)節(jié),如下圖所示,如果我們要自己去計(jì)算任意兩個坐標(biāo)系之間的變換關(guān)系,也是非常非常繁雜的。

于是ROS為我們提供了一個用來方便TF計(jì)算的工具-TF樹,TF樹用來維護(hù)ROS系統(tǒng)中的機(jī)器人以及周圍環(huán)境的所有TF變換關(guān)系,只要你的TF樹是連通的,你就可以提取任意兩個坐標(biāo)系之間的坐標(biāo)變換關(guān)系,掌控任何坐標(biāo)系的位置,ROS中的TF樹考慮到存儲容量問題,只維護(hù)最近5秒的TF變換數(shù)據(jù)。

1.監(jiān)聽TF變換

監(jiān)聽TF變換就是獲取TF樹中的坐標(biāo)變換關(guān)系,這是通過TF類中的TransformListener類實(shí)現(xiàn)的,下面以古月居的代碼為例進(jìn)行說明。

 通過這一頓操作,就可以將兩只海龜?shù)淖鴺?biāo)變換讀取出來,存到我們創(chuàng)建的transform類中,方便我們進(jìn)行其他操作。

2.廣播TF變換

廣播TF變換是用來更新TF樹的,有時我們控制了機(jī)器人進(jìn)行了位置移動,那么ROS怎么知道它新的位置呢?這就需要通過TF廣播器,將最新的機(jī)器人位置發(fā)布到TF樹中,仍然以古月居的代碼進(jìn)行說明。

 我們傳入一個參數(shù)(烏龜節(jié)點(diǎn)名字),就可以發(fā)布這只烏龜相對于世界的坐標(biāo)變換,當(dāng)我們知道了兩只烏龜相對于世界的坐標(biāo)變換,那么也可以根據(jù)公式推出他們之間的坐標(biāo)變換,因?yàn)樗鼈兪沁B通的,兩只烏龜之間的坐標(biāo)變換,只要烏龜1左乘烏龜2相對于世界變換矩陣的逆即可。

launch文件的編寫

 然后就可以運(yùn)行l(wèi)aunch文件,查看效果

roslaunch turtle_tf turtle_tf_demo.launch

二、TF常用組件

無論是使用烏龜,還是我們在仿真環(huán)境中創(chuàng)建了一個自己的機(jī)器人,ROS為我們提供了各種各樣的工具方便我們查看其中的TF變換,而不需要我們像上面的例子一樣,自己去編寫TF坐標(biāo)變換的監(jiān)聽和廣播器,下面我以mbot小車為例,展現(xiàn)一下較為復(fù)雜的TF坐標(biāo)變換關(guān)系和常用工具使用。

先打開一個gazebo仿真環(huán)境

1.tf_monitor

作用:將當(dāng)前的坐標(biāo)系轉(zhuǎn)換關(guān)系打印到終端控制臺

rosrun tf tf_monitor

 這樣就可以在終端輸出任意兩個坐標(biāo)系之間的坐標(biāo)變換,當(dāng)然也可以查看特定兩個坐標(biāo)系之間的坐標(biāo)變換,只需要給它傳入?yún)?shù)

rosrun tf tf_monitor base_link odom

2.tf_echo <source_frame> <target_frame>

作用:把特定的坐標(biāo)系之間的平移旋轉(zhuǎn)關(guān)系,打印到終端控制臺

rosrun tf tf_echo base_link odom

3.view_frames

作用:輸出當(dāng)前的tf關(guān)系以pdf的形式輸出到當(dāng)前目錄下

rosrun tf view_frames

 這個工具是非常方便且常用的

4.roswtf

作用:幫助你找到tf中的錯誤

roswtf

5.Rviz

 當(dāng)然你也可以通過最牛逼的可視化工具Rviz顯示所有的TF坐標(biāo)變換,打開一個Rviz,選擇TF即可

6.robot_state_publisher

 robot_state_publisher是機(jī)器人的狀態(tài)發(fā)布器,使用參數(shù) robots_description 指定的URDF和來自主題關(guān)節(jié)狀態(tài)的關(guān)節(jié)位置來計(jì)算機(jī)器人的正向運(yùn)動學(xué)并通過tf發(fā)布結(jié)果。

它訂閱關(guān)節(jié)狀態(tài)發(fā)布器(joint_state_publisher)節(jié)點(diǎn)發(fā)布的關(guān)節(jié)狀態(tài)主題( sensor_msgs/JointState )將機(jī)器人各個關(guān)節(jié)的tf變換發(fā)布到tf樹上,這就不需要我們自己去編寫關(guān)節(jié)狀態(tài)更新的節(jié)點(diǎn),而只需要在launch文件中,一并啟動這個ROS為我們提供的節(jié)點(diǎn)即可。

<!-- 運(yùn)行robot_state_publisher節(jié)點(diǎn),發(fā)布tf  -->
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="robot_state_publisher"  output="screen" >
        <param name="publish_frequency" type="double" value="50.0" />
    </node>

它的參數(shù)如下:

參數(shù)意義
robot_descriptionurdf 機(jī)器人描述
tf_prefix為命名空間感知的轉(zhuǎn)換發(fā)布設(shè)置tf前綴
publish_frequency狀態(tài)發(fā)布器的發(fā)布頻率(默認(rèn):50)
ignore_timestamp如果為真,則忽略 publish_frequency 和joint_states 的時間戳,并為每個接收到的joint_states 發(fā)布一個tf(默認(rèn):false)
use_tf_static設(shè)置是否使用 /tf_static 鎖存的靜態(tài)變換廣播器(默認(rèn):true)

三、SLAM中的TF

SLAM中的TF最重要的有兩部分:(1)機(jī)器人底盤坐標(biāo)系(base_frame)與里程計(jì)坐標(biāo)系(odom_frame)之間的變換關(guān)系 和 (2)里程計(jì)坐標(biāo)系(odom_frame)與地圖坐標(biāo)系(map_frame)之間的變換關(guān)系

(1)的變換關(guān)系主要是由機(jī)器人自帶的里程計(jì)(如:編碼器、IMU、laser)提供,采用的方法叫里程計(jì)位姿估計(jì)(Odometry),這一部分的主要作用是讓我們知道了機(jī)器人從初始位置(odom_frame)到現(xiàn)在位置(base_frame)的關(guān)系,但是這一部分是相對的,我們不知道環(huán)境信息時,沒法絕對的確定機(jī)器人位置,而且單純的使用里程計(jì)定位,會產(chǎn)生累計(jì)漂移誤差,這就需要使用某些方法確定機(jī)器人和環(huán)境之間的位置關(guān)系。

機(jī)器人和環(huán)境之間的坐標(biāo)變換關(guān)系可以由很多方式給出,比如AMCL(自適應(yīng)蒙特卡洛定位)專門用來機(jī)器人定位的算法、或者SLAM的方法(如激光雷達(dá)的算法gmapping),但是TF數(shù)的結(jié)構(gòu)決定了一個坐標(biāo)系只能有一個父坐標(biāo)系(一個人只能認(rèn)一個爹),base到odom的坐標(biāo)變換中,base已經(jīng)當(dāng)做父坐標(biāo)系了,因此這些定位方法往往給出里程計(jì)坐標(biāo)系(odom_frame)與地圖坐標(biāo)系(map_frame)之間的變換關(guān)系,即(2),這樣相當(dāng)于間接給出了base與map之間的關(guān)系,也可以確定機(jī)器人的位置,如下圖所示

 這樣也補(bǔ)償了里程計(jì)的漂移誤差

總結(jié)

本文介紹了TF坐標(biāo)變換的基本概念以及TF在ROS中的表示形式(TF樹),通過古月居的烏龜跟隨的例子,分析了TF樹的廣播器和監(jiān)聽器最基本的書寫形式,從中展示了如何提取和應(yīng)用TF變換的信息,并介紹了5種最常用的TF樹及TF信息的提取工具,最后簡要說明了SLAM中最為重要的兩種TF坐標(biāo)變換。

到此這篇關(guān)于ROS TF坐標(biāo)變換的文章就介紹到這了,更多相關(guān)ros tf坐標(biāo)變換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • vscode輸入npm?install報(bào)錯:node-sass@8.0.0?install:'node?scripts/install.js'解決

    vscode輸入npm?install報(bào)錯:node-sass@8.0.0?install:'node?

    這篇文章主要給大家介紹了關(guān)于vscode輸入npm?install報(bào)錯:node-sass@8.0.0?install:'node?scripts/install.js'的解決方法,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • 死鎖問題詳解

    死鎖問題詳解

    本文詳細(xì)介紹了死鎖,例如死鎖的概念、產(chǎn)生死鎖的條件、如何預(yù)防死鎖等等,有需要的朋友可以自行參考本篇文章,希望對你有所幫助
    2021-08-08
  • matlab中乘法“*”和點(diǎn)乘“.*”;除法“/”和點(diǎn)除“./”的聯(lián)系和區(qū)別

    matlab中乘法“*”和點(diǎn)乘“.*”;除法“/”和點(diǎn)除“./”的聯(lián)系和區(qū)別

    這篇文章主要介紹了matlab中乘法“*”和點(diǎn)乘“.*”;除法“/”和點(diǎn)除“./”的聯(lián)系和區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 256種編程語言大匯總

    256種編程語言大匯總

    這篇文章主要介紹了256種編程語言大匯總,想學(xué)編程語言的同學(xué)可以看一下,需要的朋友可以參考下
    2014-09-09
  • 將ChatGPT接入微信實(shí)現(xiàn)智能回復(fù)功能

    將ChatGPT接入微信實(shí)現(xiàn)智能回復(fù)功能

    這篇文章主要介紹了將ChatGPT接入微信實(shí)現(xiàn)智能回復(fù)功能,本項(xiàng)目是基于ChatGPT的微信聊天機(jī)器人,通過?OpenAI?接口生成對話內(nèi)容,使用?itchat?實(shí)現(xiàn)微信消息的接收和自動回復(fù),需要的朋友可以參考下
    2023-02-02
  • 本地部署 torchchat的詳細(xì)過程

    本地部署 torchchat的詳細(xì)過程

    TorchChat 是一個小型代碼庫,展示了無縫運(yùn)行大型語言模型 (LLMs) 的能力,使用 torchchat,您可以在自己的 (C/C++) 應(yīng)用程序(桌面或服務(wù)器)以及 iOS 和 Android 上使用 Python 運(yùn)行LLMs,這篇文章主要介紹了本地部署 torchchat,需要的朋友可以參考下
    2024-08-08
  • Burpsuite入門及使用詳細(xì)教程

    Burpsuite入門及使用詳細(xì)教程

    Burp Suite是用于攻擊web應(yīng)用程序的集成平臺,接下來通過本文給大家介紹Burpsuite入門及使用詳細(xì)教程,感興趣的朋友一起看看吧
    2021-09-09
  • UltraEdit編輯器免費(fèi)激活方法

    UltraEdit編輯器免費(fèi)激活方法

    UltraEdit?是一套功能強(qiáng)大的文本編輯器,可以編輯文本、十六進(jìn)制、ASCII?碼,完全可以取代記事本,下面小編把這款UltraEdit編輯器免費(fèi)激活方法分享給大家,需要的朋友參考下
    2021-08-08
  • Hive?判斷某個字段長度的示例代碼

    Hive?判斷某個字段長度的示例代碼

    hive是基于Hadoop的一個數(shù)據(jù)倉庫工具,用來進(jìn)行數(shù)據(jù)提取、轉(zhuǎn)化、加載,這是一種可以存儲、查詢和分析存儲在Hadoop中的大規(guī)模數(shù)據(jù)的機(jī)制,這篇文章主要介紹了Hive?判斷某個字段長度,需要的朋友可以參考下
    2024-08-08
  • 微信小程序(微信應(yīng)用號)開發(fā)工具0.9版安裝詳細(xì)教程

    微信小程序(微信應(yīng)用號)開發(fā)工具0.9版安裝詳細(xì)教程

    這篇文章主要介紹了微信小程序(微信應(yīng)用號)開發(fā)工具0.9版安裝詳細(xì)教程的相關(guān)資料,非常不錯,具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-09-09

最新評論