在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

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

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

3天內不再提示

ROS開發技術的twist_mux功能包的原理和使用方法,靈活使用鎖配置

ml8z_IV_Technol ? 來源:未知 ? 作者:易水寒 ? 2018-05-13 09:21 ? 次閱讀

twist_mux的原理類似于RTOS中的任務調度,需要為每個輸入的話題設置優先級,不同話題也可以設置為同樣的優先級,但是并不推薦這樣做。除了優先級機制外,twist_mux還可以根據超時限制、外部鎖話題(lock topics)來限制輸入話題的選擇。

我們在做機器人ROS開發時,常常會遇到相同速度控制消息的選擇問題。比如說控制機器人移動的geometry_msgs::Twist消息,可以使用鍵盤節點發布,可以使用手柄節點發布,也可以在導航過程中由movebase發布,那么這些節點同時運行時,多個節點發布相同的速度控制話題,這個時候機器人就迷茫了,到底該聽誰的呢?只能收到哪個數據就聽誰的。

針對這樣的問題,ROS提供了一種mux多路切換器——twist_mux,可以幫助我們切換到希望接收的數據源上。

— 原理—

正如我們開篇描述的場景,當機器人接收到不同節點發布的速度控制消息時,該如何進行選擇呢?

回想一下RTOS中的任務調度原則,每個任務都有自己的優先級,當有多個任務進入等待狀態時,系統會選擇優先級最高的任務執行,很多系統還支持同等優先級的任務,此時系統會按照時間片輪詢的方式執行任務,也就是不偏不倚,平等對待相同優先級的任務。

twist_mux的原理類似于RTOS中的任務調度,需要為每個輸入的話題設置優先級,不同話題也可以設置為同樣的優先級,但是并不推薦這樣做。

除了優先級機制外,twist_mux還可以根據超時限制、外部鎖話題(lock topics)來限制輸入話題的選擇。

twist_mux功能包中的核心節點就是twist_mux,其輸入、輸出如下:

ROS開發技術的twist_mux功能包的原理和使用方法,靈活使用鎖配置

左側輸入的是多個geometry_msgs::Twist類型的話題,通過twist_mux的選擇后,輸出唯一的geometry_msgs::Twist話題。下方輸入的話題就是用戶動態配置選擇機制的鎖話題,話題的消息類型是Bool,正如鎖一樣,只有打開和關閉兩種狀態。

這里鎖的概念可以理解為:通過限制不同優先級的輸入源,達到控制輸出的效果。

— 配置—

twist_mux功能包的安裝一句話就可以搞定:

sudo apt-getinstallros-indigo-twist-mux

然后就可以運行多路切換器了:

roslaunchtwist_muxtwist_mux.launch

打印當前的話題列表可以看到:

ROS開發技術的twist_mux功能包的原理和使用方法,靈活使用鎖配置

再來看一下twist_mux.launch文件里邊到底干了啥:

可以看到,在launch文件中配置了一些話題名參數,在啟動twist_mux節點的過程中還加載了兩個配置文件,twist_mux_topics.yaml對應的就是輸入話題的配置,twist_mux_locks.yaml對應的是鎖話題的配置。

1. twist_mux_topics.yaml

#Input topics handled/muxed.#For each topic:#- name : name identifier to select the topic#- topic : input topic of geometry_msgs::Twisttype#- timeout : timeoutinseconds to start discarding old messages, and use 0.0 speed instead#- priority: priorityinthe range [0, 255]; the higher the more priority over other topicstopics:-name : navigationtopic : nav_veltimeout : 0.5priority: 10-name : joysticktopic : joy_veltimeout : 0.5priority: 100-name : keyboardtopic : key_veltimeout : 0.5priority: 90-name : tablettopic : tab_veltimeout : 0.5priority: 100

該配置文件中包含了一個輸入話題的配置列表,每個輸入話題的配置項包含以下幾個:

name:一個用戶可讀的命名,不是話題名,只用于調試顯示;

topic:話題名,話題必須是geometry_msgs::Twist類型;

timeout:消息允許的超時限制,超過此時間仍然沒有數據后,會切換到其他輸入話題上,如果設置為0的話,相當于沒有限制,會無限等待;

priority:輸入話題的優先級,0~255之間,值越大優先級越高

2. twist_mux_locks.yaml

#Locks to stop the twist inputs.#For each lock:#- topic : input topic that provides the lock; it must be oftypestd_msgs::Bool?!!!#- timeout : == 0.0 -> not used# > 0.0 -> the lock is supposed to published at a certain frequencyinorder# to detect that the publisher is alive; the timeoutinseconds allows# to detect that, andifthe publisher dies we willenablethe lock#- priority: priorityinthe range [0, 255], so all the topics with priority lower than it# will be stopped/disabledlocks:-name : pausetopic : pause_navigationtimeout : 0.0#Same priority as joystick control, so it'll not block it.priority: 100-name : loop_closuretopic : stop_closing_looptimeout : 0.0priority: 200-name : joysticktopic : joy_prioritytimeout : 0.0priority: 100

關于鎖話題的配置也是一個列表,每一個子項都是一個鎖話題的配置,配置項包含以下幾個:

name:一個用戶可讀的命名,不是話題名,只用于調試顯示;

topic:鎖話題名,消息類型必須是std_msgs::Bool類型;

timeout:鎖話題需要按周期發布,所以超過時間限制后,會認為發布鎖的節點掉線了,鎖失效,類似于看門狗的功能;如果設置為0的話,則沒有超時限制,持續有效;

priority:限制輸入話題的優先級,0~255之間,在此值以下優先級的話題,會被上鎖,開鎖之前無法輸出,以達到動態控制輸出的效果。

— 實踐—

現在我們就來通過實踐驗證一下twist_mux的效果。

首先啟動twist_mux節點:

roslaunchtwist_muxtwist_mux.launch

然后監聽最終輸出的速度控制消息:

rostopicecho/twist_mux/cmd_vel

1. 多輸入源的選擇

目前還沒有任何輸入,所以還不會有輸出的消息。

接著我們就可以發布幾個輸入的消息了,先發布一個導航輸出的速度消息:

rostopic pub -r10/nav_vel geometry_msgs/Twist"linear:x:1.0y:0.0z:0.0angular:x:0.0y:0.0z:0.0"

成功發布之后,輸出監聽并沒有任何輸出,這是因為在鎖消息中,我們設置的最小優先級是100,而nav_vel的優先級在配置文件中設置的是10,自然被擋到了門外,沒辦法輸出。

再來發布joy_vel消息:

rostopic pub -r10/joy_vel geometry_msgs/Twist"linear:x:2.0y:0.0z:0.0angular:x:0.0y:0.0z:0.0"

很快就可以在輸出監聽的終端中看到如下圖所示的joy_vel的消息了:

ROS開發技術的twist_mux功能包的原理和使用方法,靈活使用鎖配置

此時有nav_vel和joy_vel兩個輸入消息,經過twist_mux的選擇后,只輸出了joy_vel消息。

那么如果我們想要輸出nav_vel怎么辦呢?

在nav_vel和joy_vel兩個消息保持發布的狀態下,重新打開一個窗口,關閉優先級門檻的限制:

rostopicpub /joy_priority std_msgs/Bool"data: false"

此時如果joy_vel消息停止或者超時的話,twist_mux就會自動切換到nav_vel輸出,我們可以直接kiil掉joy_vel的話題發布,輸出監聽的終端就會顯示nav_vel消息的數據了:

ROS開發技術的twist_mux功能包的原理和使用方法,靈活使用鎖配置

2. 停止某優先級以下的輸入源

如果我們想要暫停輸出,怎么辦呢?鎖消息中也設置了暫停nav_vel的話題:

rostopicpub /pause_navigation std_msgs/Bool"data: true"

現在nav_vel話題就暫停了,想要恢復的話,只需要再發布一次pause_navigation消息即可:

rostopicpub /pause_navigation std_msgs/Bool"data: false"

需要注意的是,/pause_navigation話題設置的優先級和joy_priority是一樣的,所以這里的暫停無法暫停優先級100及以上的話題,所以并不會影響joy_vel消息的轉發。

我們還在鎖配置中設置了一個優先級為200的控制鎖,一旦我們生效這個鎖,優先級200以下的話題都會停止轉發:

rostopicpub /stop_closing_loop std_msgs/Bool"data: true"

現在所有話題都無法通過twist_mux輸出了。

OK,現在我們應該已經明白了twist_mux功能包的原理和使用方法,靈活使用鎖配置,可以讓我們輕松控制多個輸入源的切換。

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

    關注

    22

    文章

    817

    瀏覽量

    119718
  • Mux
    Mux
    +關注

    關注

    0

    文章

    38

    瀏覽量

    23405
  • ROS
    ROS
    +關注

    關注

    1

    文章

    278

    瀏覽量

    17033

原文標題:ROS技術之—— twist_mux多路切換器

文章出處:【微信號:IV_Technology,微信公眾號:智車科技】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    電腦鍵盤功能使用方法簡介

    `電腦鍵盤功能使用方法簡介一、功能簡介: 本程序為電腦鍵盤按鍵鎖定工具。用戶可以有選擇地鎖定或解鎖電腦鍵盤上的某些按鍵。二、注意事項: 1、用戶自行設置的程序密碼請務必牢記,否則將
    發表于 12-30 15:04

    MQTT軟件配置參數和使用方法

    MQTT使用說明MQTT軟件配置參數和使用方法
    發表于 03-30 08:10

    ROS navigation功能添加自定義的全局路徑規劃器(Global Path Planner)

    ROS 的navigation官方功能提供了三種全局路徑規劃器:carrot_planner、global_planner、navfn。我們通常使用的是navfn,如果機器人執行一些特殊任務而
    發表于 05-16 19:17

    zFTP軟件的位置打開與使用方法介紹

    zFTP軟件實現了一個FTP客戶端功能,使用此軟件可以實現從FTP服務器上面下載或上傳文件。軟件的開源倉庫:zFTP,同時軟件已經加
    發表于 06-01 11:28

    基于RT-Thread操作系統env開發工具的使用方法

    git添加到系統環境變量。軟件包管理功能需要 git 的支持。注意在工作環境中,所有的路徑都不可以有中文字符或者空格。2、env 的使用方法2.1 打開 env 控制臺RT-Thread 軟件環境
    發表于 07-13 10:49

    通過將小車接入MicroROS完成了一個遙控小車的開發

    teleop_twist_keyboard teleop_twist_keyboard  接著按下入JKL,幾個按鍵,看一下小車是否動了起來。  四、總結  本節我們通過將小車接入MicroROS完成了一個遙控小車的開發。 原
    發表于 03-27 16:48

    NVIDIA Isaac ROS GEM的功能特性

    NVIDIA Isaac ROS GEM 是一款基于硬件加速的軟件,可以讓 ROS 開發者更輕松地基于 NVIDIA 硬件構建高性能解決方案。
    的頭像 發表于 08-14 11:12 ?1036次閱讀

    交換機最基本的配置使用方法

    交換機最基本的配置使用方法
    的頭像 發表于 01-04 11:34 ?7410次閱讀

    ROS Navigation Stack的整體設計思路和功能

    ROS Navigation Stack是ROS提供的一個二維的導航功能集合,通過輸入里程計、傳感器信息和目標位姿,輸出控制機器人到達目標狀態的安全速度指令。
    的頭像 發表于 02-01 11:20 ?1386次閱讀

    ROS部署PaddlePaddle的CV模型

    paddle_inference_ros_demo功能是基于paddle_inference_ros開發的,幫助
    的頭像 發表于 10-20 17:02 ?745次閱讀
    <b class='flag-5'>ROS</b>部署PaddlePaddle的CV模型

    ROS中如何設置消息信息

    設置消息信息 ROS 消息是結構。可以直接復制它們以生成新的消息。副本和原始消息都有自己的數據。創建一條類型為geometry_msgs/Twist的消息。 twist = rosmessage
    的頭像 發表于 11-15 14:55 ?385次閱讀
    <b class='flag-5'>ROS</b>中如何設置消息信息

    ROS的擴展有哪些方法

    也是毫不夸張的。 ROS的擴展即ROS universe,是全球范圍的代碼,有不同國家的ROS社區組織開發和維護。 有的是庫代碼,如OpenCV、PCL等;庫的上一層是從
    的頭像 發表于 11-21 18:12 ?719次閱讀

    如何配置ROS驅動功能

    配置ROS驅動功能 將WHEELTEC 100N的 ROS_SDK 保存在工作空間的src文件夾下。 通過 catkin_make 進行編
    的頭像 發表于 11-22 18:13 ?1417次閱讀
    如何<b class='flag-5'>配置</b><b class='flag-5'>ROS</b>驅動<b class='flag-5'>功能</b><b class='flag-5'>包</b>

    ROS2中自帶例程測試

    的一個例程。 和剛才一樣打開兩個終端,這里我們需要source一下ROS里的環境變量。 該環境變量我們剛才已經設置了過軟連接,所以配置過程中它也會配置ROS2的
    的頭像 發表于 11-28 16:29 ?997次閱讀
    <b class='flag-5'>ROS</b>2中自帶例程測試

    在TogetherROS中如何安裝ROS2功能

    安裝ROS2功能 接下來,還有一個很重要的配置,那就是安裝ROS2功能
    的頭像 發表于 12-01 16:02 ?1018次閱讀
    在TogetherROS中如何安裝<b class='flag-5'>ROS</b>2<b class='flag-5'>功能</b><b class='flag-5'>包</b>
    主站蜘蛛池模板: 国久久| 一级aaaaaa片毛片在线播放| 午夜看片福利| ass日本69| vip影视免费观看| 天天爽夜夜爽精品视频一| 国产高清色视频免费看的网址| 欧美成人一区二区三区在线电影| 婷婷丁香在线| 亚洲成人三级| 亚洲婷婷综合色高清在线| 欧美精品一区二区三区在线播放| 欧美人成网| 456成人网| 福利毛片| 国产精品午夜剧场| 黄色视网站| 国产真实野战在线视频| 男女啪视频大全1000| 爽死你个放荡粗暴小淫视频| 91色在线观看| 欧美日韩一日韩一线不卡| 三级网站在线免费观看| 速度与激情在线| 四虎影免看黄| 四虎永久在线精品| 欧美大狠狠大臿蕉香蕉大视频| 国产在线一区二区三区四区| 亚洲欧美性另类春色| 尤物久久99热国产综合| 越南黄色录像| 久操视屏| bt天堂在线最新版在线| 亚洲一区二区三区免费| 亚欧一区| 成人网中文字幕色| 亚洲一级毛片免观看| 日本免费xxxx色视频| 两性午夜欧美高清做性| 久久青青草原精品老司机| 国产在线视频不卡|