色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何對機器人靜態TF廣播進行管理

麥辣雞腿堡 ? 來源:古月居 ? 作者:古月居 ? 2023-11-22 17:31 ? 次閱讀

靜態TF廣播

我們說TF的主要作用是對坐標系進行管理,那就管理一個試試唄?

坐標變換中最為簡單的應該是相對位置不發生變化的情況,比如你家的房子在哪個位置,只要房子不拆,這個坐標應該就不會變化。

機器人系統中也很常見,比如激光雷達和機器人底盤之間的位置關系,安裝好之后基本不會變化。

在TF中,這種情況也稱之為靜態TF變換,我們來看看在程序中該如何實現?

運行效果

啟動終端,運行如下命令:

$ ros2 run learning_tf static_tf_broadcaster$ ros2 run tf2_tools view_frames

可以看到當前系統中存在兩個坐標系,一個是world,一個是house,兩者之間的相對位置不會發生改變,通過一個靜態的TF對象進行維護。

圖片

代碼解析

來看下在代碼中是如何創建坐標系并且發布靜態變換的。

learning_tf/static_tf_broadcaster.py

#!/usr/bin/env python3# -*- coding: utf-8 -*-"""@作者: 古月居(www.guyuehome.com)@說明: ROS2 TF示例-廣播靜態的坐標變換"""import rclpy                                                                 # ROS2 Python接口from rclpy.node import Node                                                  # ROS2 節點類from geometry_msgs.msg import TransformStamped                               # 坐標變換消息import tf_transformations                                                    # TF坐標變換庫from tf2_ros.static_transform_broadcaster import StaticTransformBroadcaster  # TF靜態坐標系廣播器類class StaticTFBroadcaster(Node):    def __init__(self, name):        super().__init__(name)                                                  # ROS2節點父類初始化        self.tf_broadcaster = StaticTransformBroadcaster(self)                  # 創建一個TF廣播器對象        static_transformStamped = TransformStamped()                            # 創建一個坐標變換的消息對象        static_transformStamped.header.stamp = self.get_clock().now().to_msg()  # 設置坐標變換消息的時間戳        static_transformStamped.header.frame_id = 'world'                       # 設置一個坐標變換的源坐標系        static_transformStamped.child_frame_id  = 'house'                       # 設置一個坐標變換的目標坐標系        static_transformStamped.transform.translation.x = 10.0                  # 設置坐標變換中的X、Y、Z向的平移        static_transformStamped.transform.translation.y = 5.0                            static_transformStamped.transform.translation.z = 0.0        quat = tf_transformations.quaternion_from_euler(0.0, 0.0, 0.0)          # 將歐拉角轉換為四元數(roll, pitch, yaw)        static_transformStamped.transform.rotation.x = quat[0]                  # 設置坐標變換中的X、Y、Z向的旋轉(四元數)        static_transformStamped.transform.rotation.y = quat[1]        static_transformStamped.transform.rotation.z = quat[2]        static_transformStamped.transform.rotation.w = quat[3]        self.tf_broadcaster.sendTransform(static_transformStamped)              # 廣播靜態坐標變換,廣播后兩個坐標系的位置關系保持不變def main(args=None):    rclpy.init(args=args)                                # ROS2 Python接口初始化    node = StaticTFBroadcaster("static_tf_broadcaster")  # 創建ROS2節點對象并進行初始化    rclpy.spin(node)                                     # 循環等待ROS2退出    node.destroy_node()                                  # 銷毀節點對象    rclpy.shutdown()

完成代碼的編寫后需要設置功能包的編譯選項,讓系統知道Python程序的入口,打開功能包的setup.py文件,加入如下入口點的配置:

entry_points={        'console_scripts': [            'static_tf_broadcaster = learning_tf.static_tf_broadcaster:main',        ],    },

經過這段代碼,兩個坐標系的變化是描述清楚了,到了使用的時候,我們又該如何查詢呢?

TF監聽

我們再來學習下如何查詢兩個坐標系之間的位置關系。

運行效果

啟動一個終端,運行如下節點,就可以在終端中看到周期顯示的坐標關系了。

$ ros2 run learning_tf tf_listener

圖片

代碼解析

這個節點中是如何查詢坐標關系的,我們來看下代碼

learning_tf/tf_listener.py

#!/usr/bin/env python3# -*- coding: utf-8 -*-"""@作者: 古月居(www.guyuehome.com)@說明: ROS2 TF示例-監聽某兩個坐標系之間的變換"""import rclpy                                              # ROS2 Python接口庫from rclpy.node import Node                               # ROS2 節點類import tf_transformations                                 # TF坐標變換庫from tf2_ros import TransformException                    # TF左邊變換的異常類from tf2_ros.buffer import Buffer                         # 存儲坐標變換信息的緩沖類from tf2_ros.transform_listener import TransformListener  # 監聽坐標變換的監聽器類class TFListener(Node):    def __init__(self, name):        super().__init__(name)                                      # ROS2節點父類初始化        self.declare_parameter('source_frame', 'world')             # 創建一個源坐標系名的參數        self.source_frame = self.get_parameter(                     # 優先使用外部設置的參數值,否則用默認值            'source_frame').get_parameter_value().string_value        self.declare_parameter('target_frame', 'house')             # 創建一個目標坐標系名的參數        self.target_frame = self.get_parameter(                     # 優先使用外部設置的參數值,否則用默認值            'target_frame').get_parameter_value().string_value        self.tf_buffer = Buffer()                                   # 創建保存坐標變換信息的緩沖區        self.tf_listener = TransformListener(self.tf_buffer, self)  # 創建坐標變換的監聽器        self.timer = self.create_timer(1.0, self.on_timer)          # 創建一個固定周期的定時器,處理坐標信息    def on_timer(self):        try:            now = rclpy.time.Time()                                 # 獲取ROS系統的當前時間            trans = self.tf_buffer.lookup_transform(                # 監聽當前時刻源坐標系到目標坐標系的坐標變換                self.target_frame,                self.source_frame,                now)        except TransformException as ex:                            # 如果坐標變換獲取失敗,進入異常報告            self.get_logger().info(                f'Could not transform {self.target_frame} to {self.source_frame}: {ex}')            return        pos  = trans.transform.translation                          # 獲取位置信息        quat = trans.transform.rotation                             # 獲取姿態信息(四元數)        euler = tf_transformations.euler_from_quaternion([quat.x, quat.y, quat.z, quat.w])        self.get_logger().info('Get %s -- > %s transform: [%f, %f, %f] [%f, %f, %f]'           % (self.source_frame, self.target_frame, pos.x, pos.y, pos.z, euler[0], euler[1], euler[2]))def main(args=None):    rclpy.init(args=args)                       # ROS2 Python接口初始化    node = TFListener("tf_listener")            # 創建ROS2節點對象并進行初始化    rclpy.spin(node)                            # 循環等待ROS2退出    node.destroy_node()                         # 銷毀節點對象    rclpy.shutdown()                            # 關閉ROS2 Python接口

完成代碼的編寫后需要設置功能包的編譯選項,讓系統知道Python程序的入口,打開功能包的setup.py文件,加入如下入口點的配置:

entry_points={        'console_scripts': [            'static_tf_broadcaster = learning_tf.static_tf_broadcaster:main',            'tf_listener = learning_tf.tf_listener:main',        ],    },

好啦,大家現在對TF的基本使用有所了解了。我們繼續挑戰兩只海龜跟隨的案例。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 機器人
    +關注

    關注

    211

    文章

    28512

    瀏覽量

    207511
  • 坐標系
    +關注

    關注

    0

    文章

    29

    瀏覽量

    7340
  • 程序
    +關注

    關注

    117

    文章

    3792

    瀏覽量

    81163
  • ROS
    ROS
    +關注

    關注

    1

    文章

    278

    瀏覽量

    17035
收藏 人收藏

    評論

    相關推薦

    機器人餐廳

    機器人、地面送餐機器人、空中傳菜機器人、迎賓機器人等20個各式機器人。它們長相色彩各異,個頭1.3至1.6米不等,可以呈現10多種面部表情,
    發表于 07-26 09:11

    什么是工業機器人

    機械手之間有防護墻隔開,操作者可通過觀察窗或閉路電視對從機械手操作機進行有效的監視,主從機械手系統的出現為機器人的產生為近代機器人的設計與制造作了鋪墊。1954年美國戴沃爾最早提出了工業機器人
    發表于 01-19 10:58

    機器人視覺——機器人的“眼睛”

    目前產業機器人僅能在嚴格定義的結構化環境中執行預定指令動作,缺乏對環境的感知與應變能力,這極大地限制了機器人的應用。利用機器人的視覺控制,不需要預先對產業機器人的運動軌跡
    發表于 01-23 15:02

    【MiCOKit申請】智能管理機器人(家庭廣泛使用)

    申請理由:目前,人們大多數處于工作的忙碌中,待在家里的時間是很短的,家里有很多東西需要去實時管理維護,我們不可能每天工作時回家,那要怎么辦呢?當然,使用一臺智能管理機器人便可,我們可以通過互聯網在
    發表于 08-09 17:57

    語義機器人

    客服機器人系統、智能硬件和機器人的對話系統建設,能讓人機對話的過程變得更加自然流暢;另外還可以接入類似幼兒教育、聽廣播、訂機票等外部服務,功能可以無限擴展。
    發表于 03-10 16:52

    辰漢-如何實現服務機器人的運算與控制

    的核心系統。攝像頭采集視頻圖像,會對圖像中的事物進行一些簡單的判別,比如識別人臉,對靜態事物的圖像采集也能讓機器人辨別障礙物,或者計算出靜態事物的大致幾何圖形甚至尺寸,對動態事物的圖像
    發表于 06-09 17:18

    機器人、協作機器人和移動機器人,你分的清楚嗎

    、激光掃描儀等。目的是把機器人與人分開。所有安全性都可以根據機械安全標準ISO 13849和IEC 62061(IEC 61508的機械解釋)進行設計COBOT表示協作機器人。它們是被設計為與人交互
    發表于 10-30 11:33

    工業機器人的技術原理

    及以太網的聯網功能。可用于機器人控制器之間和機器人控制器同上位機的通訊,便于對機器人生產線進行監控、診斷和管理。  工業
    發表于 11-23 10:40

    機器人系統是什么?

    機器人的移動通常是從管理機器人總體任務進度的中央處理器發出位置變化請求時開始的。導航系統通過制定行程計劃或軌跡以開始執行位置變化請求。行程計劃需考慮可用路徑、已知障礙位置、機器人能力及
    發表于 09-10 10:44

    使用旅游機器人需要注意哪些問題?

    決消費者的咨詢問題,機器人就是一個很好的載體。機器人甚至可以把客戶基本的需求都解決了。  如今的人臉識別越來越成熟,機器人的人臉識別也會成為標配,因而,機器人可以通過人臉識別對訪客
    發表于 06-12 17:04

    機器人是什么?

    自主機器人。這些都是機器人的智能藝術。除了這個被廣泛接受的分類,機器人可以根據它們的運動方式和工作環境進行分類,如輪式機器人、腿式
    發表于 03-31 10:31

    輪式機器人怎么樣

    ,人類友好型機器人開始在實體店進行實時盤點,這使得超市能夠減少每種產品的貨架空間,并增加給定時間內可以攜帶的庫存量。輪式機器人甚至可以進軍賓館,提供從入住到客房服務的接待服務。 對于這些輪式
    發表于 11-09 07:49

    掃地機器人系統的解決方案分享

    掃地機器人典型應用是四節鋰電池串聯使用。電池管理分為電池保護以及充電管理兩個部分。如下圖所示, 電池保護部分一般會設計在電池包里面,針對電池在各種工況下的異常情況進行診斷和保護。 充電
    發表于 11-10 06:05

    Redzone Robotics的Solo機器人進行管道檢測

    Redzone Robotics的Solo機器人是完全自主的下水道管道檢測機器人,可以節省成本并限制道路封閉,從而節省成本。
    的頭像 發表于 11-28 06:57 ?3289次閱讀

    機器人TF電機要求有哪些

    TF電機在機器人應用中非常多,如機器人的關節活動、行走、各種動作等等都是需要微型電機來驅動的。拋開大型的機器人不說,小型的機器人就需要用到
    發表于 06-25 18:40 ?1383次閱讀
    主站蜘蛛池模板: 呻吟翘臀后进爆白浆| 亚洲成AV人电影在线观看| 在线观看亚洲免费人成网址 | 超碰在线线公开免费视频| 日本午夜精品一区二区三区电影| 国产高潮国产高潮久久久久久| 亚洲AV怡红院影院怡春院| 久久精品亚洲精品国产欧美| caoporn超碰在线| 吸奶舔下面| 恋夜影院安卓免费列表uc| 成人a视频在线观看| 亚洲精品天堂在线观看| 欧美成人momandson| 国产精品-区区久久久狼| 在线视频免费观看| 色欲AV亚洲永久无码精品麻豆| 和搜子的日子 在线观看| caoporen超碰在线视频| 亚洲高清一区二区三区电影| 妞干网手机免费视频| 国产亚洲精品精品精品| 99久免费精品视频在线观看2| 四虎影视国产精品亚洲精品| 老师破女学生特级毛片| 国产精品视频第一区二区三区| 嘴巴舔着她的私处插| 午夜宅宅伦电影网中文字幕| 免费精品在线视频| 韩国伦理电影在线神马网| 成 人 免费 黄 色 网站无毒下载| 一个人看www| 午夜伦伦电影理论片费看| 女人的选择hd| 久久大香萑太香蕉av| 国产精品涩涩涩视频网站 | 青青草在线视频| 久久伊人网站| 国产全肉乱妇杂乱视频| 超碰视频在线观看| 最新亚洲中文字幕在线观看 |