ROS 2行動(dòng)-actions-
前序:ROS 2參數(shù)-parameters-

視頻教程(Linux):https://www.bilibili.com/video/BV1St4y197MP/
本節(jié)詳細(xì)介紹行動(dòng)action。
1. 如何理解行動(dòng)action:
行動(dòng)action是ROS 2中用于長(zhǎng)時(shí)間運(yùn)行任務(wù)的通信類型之一。 它由三部分組成:目標(biāo),結(jié)果和反饋。
行動(dòng)基于主題和服務(wù)。 它們的功能與服務(wù)相似,但行動(dòng)是可搶占的模式(即,可以在執(zhí)行時(shí)將其取消)。 與返回單個(gè)響應(yīng)的服務(wù)不同,它們還提供穩(wěn)定的反饋(過(guò)程狀態(tài)反饋)。
行動(dòng)使用客戶端-服務(wù)器端模型,類似于發(fā)布者-訂閱者模型(已經(jīng)在主題教程中進(jìn)行了介紹)。 “行動(dòng)客戶端”節(jié)點(diǎn)將目標(biāo)發(fā)送到“行動(dòng)服務(wù)器”節(jié)點(diǎn),該節(jié)點(diǎn)確認(rèn)目標(biāo)并返回反饋流和一個(gè)結(jié)果。
2. 行動(dòng)action有哪些命令功能:
ros2 action -h
命令如下:
info:顯示行動(dòng)具體信息
list:輸出行動(dòng)名列表
send_goal:發(fā)送行動(dòng)目標(biāo)
show:顯示行動(dòng)類型定義
行動(dòng)消息格式如下:
# The desired heading in radians
float32 theta
---
# The angular displacement in radians to the starting position
float32 delta
---
# The remaining rotation in radians
float32 remaining
主題消息,沒有---
服務(wù)消息,一個(gè)---
行動(dòng)消息,兩個(gè)---
3. 行動(dòng)命令實(shí)踐
啟動(dòng)turtesim案例如下:
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
3.1 小試牛刀
啟動(dòng)/teleop_turtle節(jié)點(diǎn)時(shí),在終端中看到以下消息:
專注于第二行,它對(duì)應(yīng)于一個(gè)行動(dòng)。 (第一條指令對(duì)應(yīng)于主題教程中先前討論的“ cmd_vel”主題。)
請(qǐng)注意,字母鍵G | B | V | C | D | E | R | T在鍵盤上的F鍵周圍形成一個(gè)“框”。 F周圍每個(gè)鍵的位置都對(duì)應(yīng)于turtlesim中的方向。 例如,E會(huì)將烏龜?shù)姆较蛐D(zhuǎn)到左上角。
注意節(jié)點(diǎn)/turtlesim正在運(yùn)行的終端。 每次按這些鍵之一,就向一個(gè)目標(biāo)服務(wù)器發(fā)送目標(biāo),該服務(wù)器是/ turtlesim節(jié)點(diǎn)的一部分。 目標(biāo)是旋轉(zhuǎn)烏龜以使其朝向特定方向。 烏龜完成旋轉(zhuǎn)后,將顯示一條有關(guān)目標(biāo)結(jié)果的消息:
E:
V:
F鍵將取消目標(biāo)的中間執(zhí)行,表明行動(dòng)具有可搶占的功能。
嘗試按C鍵,在烏龜完成旋轉(zhuǎn)之前按F鍵。 在/turtlesim節(jié)點(diǎn)運(yùn)行的終端中,將看到以下消息:
客戶端(在Teleop中的輸入)不僅可以搶占目標(biāo),而且服務(wù)器端(/turtlesim節(jié)點(diǎn))也可以搶占目標(biāo)。 當(dāng)服務(wù)器端搶占一個(gè)行動(dòng)時(shí),它“中止”了目標(biāo)。
嘗試先按D鍵,在完成第一次旋轉(zhuǎn)之前按G鍵。 在/turtlesim節(jié)點(diǎn)運(yùn)行的終端中,將看到以下消息:
服務(wù)器端中止了前一個(gè)目標(biāo),因?yàn)樗恢袛嗔恕?/p>
3.2 節(jié)點(diǎn)信息(行動(dòng))
要查看/turtlesim節(jié)點(diǎn)的行動(dòng),請(qǐng)打開一個(gè)新終端并運(yùn)行以下命令:
ros2 node info /turtlesim
這將返回/turtlesim的訂閱者,發(fā)布者,服務(wù),行動(dòng)服務(wù)器和行動(dòng)客戶端的列表:
請(qǐng)注意,/turtlesim的行動(dòng)/turtle1/rotate_absolute位于行動(dòng)服務(wù)器端下。 這意味著/turtlesim會(huì)響應(yīng)行動(dòng)/turtle1/rotate_absolute并提供反饋。
節(jié)點(diǎn)/teleop_turtle在“行動(dòng)客戶端”下具有名稱/turtle1/rotate_absolute,這表示它發(fā)送該目標(biāo)行動(dòng)的名稱。
ros2 node info /teleop_turtle
通俗一點(diǎn):
節(jié)點(diǎn)turtlesim為行動(dòng)服務(wù)器端
節(jié)點(diǎn)teleop_turtle為行動(dòng)客戶端
3.3 行動(dòng)列表
顯示ROS圖中的所有行動(dòng),運(yùn)行以下命令:
ros2 action list
返回值:
/turtle1/rotate_absolute
這是目前ROS圖中唯一的行動(dòng)。 如先前所見,它控制著烏龜?shù)男D(zhuǎn)。 使用ros2節(jié)點(diǎn)信息
3.4 行動(dòng)信息
使用以下命令進(jìn)一步查詢/turtle1/rotate_absolute行動(dòng):
ros2 action info /turtle1/rotate_absolute
返回:
運(yùn)行ros2節(jié)點(diǎn)信息:/teleop_turtle節(jié)點(diǎn)有一個(gè)行動(dòng)客戶端,/turtlesim節(jié)點(diǎn)有一個(gè)針對(duì)/turtle1/rotate_absolute行動(dòng)服務(wù)器。
3.5 行動(dòng)接口
發(fā)送或執(zhí)行目標(biāo)行動(dòng)之前,需要知道是行動(dòng)的結(jié)構(gòu)類型。
回想一下,在運(yùn)行ros2行動(dòng)列表-t時(shí),已經(jīng)確定了/turtle1/rotate_absolute的類型。 在終端中輸入以下命令和行動(dòng)類型:
ros2 interface show turtlesim/action/RotateAbsolute.action
返回:
該消息的位于---上方的第一部分,是目標(biāo)請(qǐng)求結(jié)構(gòu)(數(shù)據(jù)類型和名稱)。中間部分是結(jié)果的結(jié)構(gòu)。 最下面一部分是反饋的結(jié)構(gòu)。
3.6 命令行發(fā)布行動(dòng)
現(xiàn)在,使用以下語(yǔ)法從命令行發(fā)送一個(gè)目標(biāo)行動(dòng):
ros2 action send_goal
密切注意turtlesim窗口,并在終端中輸入以下命令:
ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute {"theta: 1.57"}
顯示如下:
所有目標(biāo)都有唯一的ID,如返回消息所示。 還可以看到結(jié)果,一個(gè)名為delta的字段,它是到起始位置的位移。
要查看此目標(biāo)的反饋,請(qǐng)將--feedback添加到運(yùn)行的最后一個(gè)命令。 首先,請(qǐng)確保更改theta的值。 運(yùn)行上一條命令后,烏龜將已經(jīng)處于1.57弧度的方向,因此除非傳遞新的theta,否則它不會(huì)移動(dòng)。
ros2 action send_goal /turtle1/rotate_absolute turtlesim/action/RotateAbsolute {"theta: -1.57"} --feedback
過(guò)程1:
過(guò)程2:
將繼續(xù)收到剩余弧度值的反饋,直到完成目標(biāo)。
4. 小結(jié)
行動(dòng)類似服務(wù),實(shí)現(xiàn)執(zhí)行長(zhǎng)時(shí)間運(yùn)行的任務(wù),提供定期反饋并可以取消。
機(jī)器人系統(tǒng)可能會(huì)使用行動(dòng)進(jìn)行導(dǎo)航。 一個(gè)行動(dòng)目標(biāo)可以告訴機(jī)器人去某個(gè)位置。 機(jī)器人導(dǎo)航到該位置時(shí),可以沿途發(fā)送更新(即反饋),一旦到達(dá)目的地,它就會(huì)發(fā)送最終結(jié)果消息。
Turtlesim有一個(gè)行動(dòng)服務(wù)器,行動(dòng)客戶端可以將目標(biāo)發(fā)送給旋轉(zhuǎn)的烏龜。 在本教程中,對(duì)行動(dòng)/turtle1/rotate_absolute進(jìn)行了分析,更好地了解什么是行動(dòng)以及它們?nèi)绾喂ぷ鳌?/p>
機(jī)器人
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。