国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【ROS】如何讓ROS中節(jié)點(diǎn)實(shí)現(xiàn)數(shù)據(jù)交換Ⅱ --服務(wù)通信

這篇具有很好參考價(jià)值的文章主要介紹了【ROS】如何讓ROS中節(jié)點(diǎn)實(shí)現(xiàn)數(shù)據(jù)交換Ⅱ --服務(wù)通信。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

【ROS】如何讓ROS中節(jié)點(diǎn)實(shí)現(xiàn)數(shù)據(jù)交換Ⅱ --服務(wù)通信

Halo,這里是Ppeua。平時(shí)主要更新C語(yǔ)言,C++,數(shù)據(jù)結(jié)構(gòu)算法…感興趣就關(guān)注我吧!你定不會(huì)失望。
本章將介紹如何通過(guò)服務(wù)通信的方式實(shí)現(xiàn)節(jié)點(diǎn)數(shù)據(jù)交換以及ROS相關(guān)指令

【ROS】如何讓ROS中節(jié)點(diǎn)實(shí)現(xiàn)數(shù)據(jù)交換Ⅱ --服務(wù)通信

0.服務(wù)通信概念

在ros中,一個(gè)節(jié)點(diǎn)想要獲取某種服務(wù)(例如:一個(gè)節(jié)點(diǎn)想要獲取此時(shí)的相機(jī)數(shù)據(jù),節(jié)點(diǎn)就需要向相機(jī)發(fā)送一個(gè)請(qǐng)求,而相機(jī)接收到請(qǐng)求后可以根據(jù)消息類(lèi)型將數(shù)據(jù)類(lèi)型返回),這就是基本的服務(wù)通信使用場(chǎng)景。

以請(qǐng)求響應(yīng)的方式實(shí)現(xiàn)不同節(jié)點(diǎn)間的數(shù)據(jù)交互
【ROS】如何讓ROS中節(jié)點(diǎn)實(shí)現(xiàn)數(shù)據(jù)交換Ⅱ --服務(wù)通信
我們現(xiàn)階段也不需要了解具體這代表什么意思,只需要知道:

client客戶(hù)端/server服務(wù)端先后在rosmaster中注冊(cè)本身信息,然后通過(guò)相同話題匹配.

  1. server 與 client 的啟動(dòng)無(wú)先后順序要求
  2. server 與 client 都可以有多個(gè)
  3. server 與 client 連接后不再需要rosmaster,也就是說(shuō)僅在嘗試連接的時(shí)候需要rosmaster

1.自定義srv消息

srv消息是服務(wù)端與客戶(hù)端之間通信的一個(gè)數(shù)據(jù)載體,可用數(shù)據(jù)類(lèi)型與std_msgs里的數(shù)據(jù)類(lèi)型一致,但需要自己定義.

步驟大概為以下幾步:

  1. 根據(jù)需要定義srv格式消息
  2. 修改配置文件
  3. 編譯生成中間文件并引用

1.1定義srv格式消息

這是一個(gè)自己定義的srv的消息格式
因?yàn)橐獙?shí)現(xiàn)的是兩個(gè)數(shù)相加,所以這樣定義。

其中—上方為client客戶(hù)端發(fā)送的消息格式,下方為服務(wù)端響應(yīng)的消息格式。

# 客戶(hù)端請(qǐng)求
int32 num1
int32 num2
---
# 服務(wù)端響應(yīng)
int32 ans

1.2修改配置文件

  1. 和定義msg類(lèi)似,也要先修改功能包目錄下的package.xml,
    【ROS】如何讓ROS中節(jié)點(diǎn)實(shí)現(xiàn)數(shù)據(jù)交換Ⅱ --服務(wù)通信
    其中54行的message_generation是編譯時(shí)的消息軟件包
    而59行message_runtime是運(yùn)行時(shí)的消息軟件包
  2. 在CMakeList中找到這些地方并修改
     # 1.編譯時(shí)的依賴(lài)包
     find_package(catkin REQUIRED COMPONENTS
     rospy
     std_msgs
     message_generation
     )
     # 2.加入自己定義的srv文件名字
     add_service_files(
     FILES
     Addints.srv 
     )
     # 3.編譯包時(shí)的消息依賴(lài)
     generate_messages(
     DEPENDENCIES
     std_msgs
     )
     # 4.加入message_runtime,但官網(wǎng)沒(méi)有這一步似乎也可以.
     catkin_package(**chmod +x py文件**
     CATKIN_DEPENDS rospy std_msgs message_runtime
     )
    
  3. 編譯一下,可以在這個(gè)路徑中找到剛剛編譯完的中間件
    之后調(diào)用的方法如下
    # 
    from packagename.srv import * 
    
    至于為什么要import * 我們可以先來(lái)看看編譯完產(chǎn)生的文件是什么樣的

【ROS】如何讓ROS中節(jié)點(diǎn)實(shí)現(xiàn)數(shù)據(jù)交換Ⅱ --服務(wù)通信

其產(chǎn)生了一個(gè)srv的中間件,出現(xiàn)了三個(gè)類(lèi),我們之后這三個(gè)類(lèi)都需要使用到,所以一般都是直接import*

2.自定義srv服務(wù)通信客戶(hù)端python實(shí)現(xiàn):

先來(lái)分析下作為一個(gè)客戶(hù)端我們需要做什么事

  1. 初始化ros節(jié)點(diǎn)
  2. 創(chuàng)建請(qǐng)求對(duì)象,設(shè)置通信話題
  3. 請(qǐng)求響應(yīng),獲得響應(yīng)結(jié)果
import rospy

import lesson3_srv.srv import *

rospy.init_node("sum_client")

client=rospy.ServiceProxy("sum2",Addints)

if(len(sys.argv)!=3):

    rospy.logerr("參數(shù)不對(duì)")

    sys.exit(1)

num=int(sys.argv[1])

num2=int(sys.argv[2])

response=client.call(num,num2)

rospy.loginfo("%d",response.ans)

這里先導(dǎo)入了rospy的包以及消息類(lèi)型,初始化了節(jié)點(diǎn)信息與話題。

創(chuàng)建了請(qǐng)求服務(wù)的對(duì)象,serviceprovy(話題,srv消息)

對(duì)傳入的參數(shù)進(jìn)行了一個(gè)處理
clint.call返回類(lèi)型為自定義消息類(lèi)型的格式,call(srv中的參數(shù))

最后處理返回的消息

這就是客戶(hù)端實(shí)現(xiàn),當(dāng)然還有一些優(yōu)化內(nèi)容,等服務(wù)端實(shí)現(xiàn)完在提

3.自定義srv服務(wù)通信服務(wù)端python實(shí)現(xiàn):

先來(lái)分析下作為一個(gè)服務(wù)端我們需要做什么事

  1. 初始化節(jié)點(diǎn)
  2. 設(shè)置訂閱話題
  3. 設(shè)置處理消息的回調(diào)函數(shù)
import rospy

from lesson3_srv.srv import *

def doNum(request):

    num1=request.num1

    num2=request.num2

    sum=num1+num2

    response=AddintsResponse()

    response.ans=sum

    rospy.loginfo("%d %d %d",request.num1,request.num2,response.ans)

    return response

rospy.init_node("sum")

server=rospy.Service("sum2",Addints,doNum)

rospy.spin()

這里先導(dǎo)包

然后通過(guò)service(話題名稱(chēng),srv消息類(lèi)型,回調(diào)函數(shù))創(chuàng)建服務(wù)對(duì)象

剛剛客戶(hù)端傳入的數(shù)據(jù),會(huì)作為回調(diào)函數(shù)的參數(shù)

先將其取出,之后通過(guò)AddintsResponse的方法創(chuàng)建一個(gè)返回對(duì)象,改變ans后返回此時(shí)的返回值是給了客戶(hù)端

4.優(yōu)化客戶(hù)端

這里的客戶(hù)端有個(gè)很小的問(wèn)題,僅能在服務(wù)器啟動(dòng)后進(jìn)行通信,若服務(wù)器沒(méi)有啟動(dòng),而先啟動(dòng)了客戶(hù)端就會(huì)出錯(cuò),ros官方提供了兩個(gè)解決方法,二者選其一即可

# rospy.wait_for_service(話題名稱(chēng))
# client.wait_for_service()

所以改進(jìn)的客戶(hù)端代碼如下:

import rospy

import sys

from lesson3_srv.srv import *

rospy.init_node("sum_client")

client=rospy.ServiceProxy("sum2",Addints)

if(len(sys.argv)!=3):

    rospy.logerr("參數(shù)不對(duì)")

    sys.exit(1)

num=int(sys.argv[1])

num2=int(sys.argv[2])

#client.wait_for_service()

rospy.wait_for_service("sum2")

response=client.call(num,num2)

rospy.loginfo("%d",response.ans)

5.啟動(dòng)運(yùn)行

  1. 先添加可執(zhí)行權(quán)限 chmod +x py文件
  2. 之后配置一下CMakeList.txt
     catkin_install_python(
         PROGRAMS
     scripts/demo01_server.py
     scripts/demo01_client.py
     DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
     )
    
  3.  rosrun lesson3_srv demo01_client.py
     rosrun lesson3_srv demo01_server.py
    

運(yùn)行效果:傳入2 3 返回值為 5
【ROS】如何讓ROS中節(jié)點(diǎn)實(shí)現(xiàn)數(shù)據(jù)交換Ⅱ --服務(wù)通信
【ROS】如何讓ROS中節(jié)點(diǎn)實(shí)現(xiàn)數(shù)據(jù)交換Ⅱ --服務(wù)通信

至此服務(wù)通信內(nèi)容結(jié)束文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-436639.html

到了這里,關(guān)于【ROS】如何讓ROS中節(jié)點(diǎn)實(shí)現(xiàn)數(shù)據(jù)交換Ⅱ --服務(wù)通信的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【ROS】服務(wù)通信、話題通信的應(yīng)用

    【ROS】服務(wù)通信、話題通信的應(yīng)用

    Halo,這里是Ppeua。平時(shí)主要更新C語(yǔ)言,C++,數(shù)據(jù)結(jié)構(gòu)算法…感興趣就關(guān)注我吧!你定不會(huì)失望。 本章將來(lái)學(xué)習(xí)如何利用話題通信,服務(wù)通信兩種種方式對(duì)turtlesim進(jìn)行一個(gè)控制 利用話題通信發(fā)布一個(gè)位姿信息,讓烏龜一直做圓周運(yùn)動(dòng) 首先,先啟動(dòng) turtlesim 這個(gè)節(jié)點(diǎn) 現(xiàn)在可以直

    2024年02月06日
    瀏覽(47)
  • ROS學(xué)習(xí)筆記(六)---服務(wù)通信機(jī)制

    ROS學(xué)習(xí)筆記(六)---服務(wù)通信機(jī)制

    在ROS中,服務(wù)通信機(jī)制是一種點(diǎn)對(duì)點(diǎn)的通信方式,用于節(jié)點(diǎn)之間的請(qǐng)求和響應(yīng)。它允許一個(gè)節(jié)點(diǎn)(服務(wù)請(qǐng)求方)向另一個(gè)節(jié)點(diǎn)(服務(wù)提供方)發(fā)送請(qǐng)求,并等待響應(yīng)。 服務(wù)通信機(jī)制在ROS中使用以下兩個(gè)概念: 服務(wù)(Service):服務(wù)是一種在ROS中定義的一對(duì)相關(guān)消息類(lèi)型,包括

    2024年02月07日
    瀏覽(22)
  • ROS2從入門(mén)到精通1-2:詳解ROS2服務(wù)通信機(jī)制與自定義服務(wù)

    ROS2從入門(mén)到精通1-2:詳解ROS2服務(wù)通信機(jī)制與自定義服務(wù)

    本專(zhuān)欄旨在通過(guò)對(duì)ROS2的系統(tǒng)學(xué)習(xí),掌握ROS2底層基本分布式原理,并具有機(jī)器人建模和應(yīng)用ROS2進(jìn)行實(shí)際項(xiàng)目的開(kāi)發(fā)和調(diào)試的工程能力。 ??詳情:《ROS2從入門(mén)到精通》 服務(wù) 是 ROS 圖中節(jié)點(diǎn)之間的另一種通信方法。服務(wù)基于 服務(wù)器-客戶(hù)端 模型,不同于話題的 發(fā)布者-訂閱者

    2024年04月09日
    瀏覽(21)
  • ROS實(shí)現(xiàn)一個(gè)節(jié)點(diǎn)同時(shí)發(fā)布訂閱多個(gè)話題(C++版)

    ??如果想在一個(gè)節(jié)點(diǎn)同時(shí)發(fā)布訂閱多個(gè)話題就要使用到多線程機(jī)制,在C++中如何使用多線程,在C++中開(kāi)多線程模板已經(jīng)有了介紹,就是下面這個(gè): ?? 但是有一點(diǎn)需要注意的是,創(chuàng)建節(jié)點(diǎn)的涉及到一個(gè)主線程,如果想同時(shí)發(fā)布訂閱是不能使用主線程的(也就是不能主線程發(fā)

    2024年02月11日
    瀏覽(26)
  • 實(shí)現(xiàn)安全的服務(wù)通信:探索如何使用服務(wù)網(wǎng)格來(lái)確保服務(wù)間的安全通信

    實(shí)現(xiàn)安全的服務(wù)通信:探索如何使用服務(wù)網(wǎng)格來(lái)確保服務(wù)間的安全通信

    ???? 博主貓頭虎 帶您 Go to New World.??? ?? 博客首頁(yè)——貓頭虎的博客?? ??《面試題大全專(zhuān)欄》 文章圖文并茂??生動(dòng)形象??簡(jiǎn)單易學(xué)!歡迎大家來(lái)踩踩~?? ?? 《IDEA開(kāi)發(fā)秘籍專(zhuān)欄》學(xué)會(huì)IDEA常用操作,工作效率翻倍~?? ?? 《100天精通Golang(基礎(chǔ)入門(mén)篇)》學(xué)會(huì)Golang語(yǔ)言

    2024年02月07日
    瀏覽(21)
  • [ROS 系列學(xué)習(xí)教程] ROS參數(shù)服務(wù)器(Param):通信模型、Hello World與拓展

    [ROS 系列學(xué)習(xí)教程] ROS參數(shù)服務(wù)器(Param):通信模型、Hello World與拓展

    ROS 系列學(xué)習(xí)教程(總目錄) 參數(shù)服務(wù)器在ROS中主要用于實(shí)現(xiàn)不同節(jié)點(diǎn)之間的數(shù)據(jù)共享。 參數(shù)服務(wù)器相當(dāng)于是獨(dú)立于所有節(jié)點(diǎn)的一個(gè)公共容器,可以將數(shù)據(jù)存儲(chǔ)在該容器中,被不同的節(jié)點(diǎn)調(diào)用,當(dāng)然不同的節(jié)點(diǎn)也可以往其中存儲(chǔ)數(shù)據(jù)。 使用場(chǎng)景一般存儲(chǔ)一些機(jī)器人的固有參數(shù),

    2024年02月01日
    瀏覽(29)
  • 不用網(wǎng)閘、FTP的話 如何實(shí)現(xiàn)內(nèi)外網(wǎng)數(shù)據(jù)交換?

    不用網(wǎng)閘、FTP的話 如何實(shí)現(xiàn)內(nèi)外網(wǎng)數(shù)據(jù)交換?

    網(wǎng)絡(luò)隔離已然成為很多企業(yè)首選的數(shù)據(jù)保護(hù)方式,即使是內(nèi)部人員之間,也是不能隨意的發(fā)送敏感文件的。但是,文件的流轉(zhuǎn)交互,又是不可避免的,網(wǎng)絡(luò)隔離保障了企業(yè)網(wǎng)絡(luò)安全,但在具體實(shí)踐中仍需解決各隔離網(wǎng)間的數(shù)據(jù)傳輸問(wèn)題,不僅僅是內(nèi)部人員之間,和外部伙伴之

    2024年02月04日
    瀏覽(18)
  • 醫(yī)院如何實(shí)現(xiàn)安全又穩(wěn)定的跨網(wǎng)文件數(shù)據(jù)交換呢?

    醫(yī)院如何實(shí)現(xiàn)安全又穩(wěn)定的跨網(wǎng)文件數(shù)據(jù)交換呢?

    隨著醫(yī)療信息化的發(fā)展,醫(yī)院之間需要頻繁地進(jìn)行文件數(shù)據(jù)交換,以實(shí)現(xiàn)診療、科研、管理等方面的協(xié)同和共享。然而,由于醫(yī)院網(wǎng)絡(luò)環(huán)境的復(fù)雜性和敏感性,跨網(wǎng)文件數(shù)據(jù)交換面臨著安全性和穩(wěn)定性的雙重挑戰(zhàn)。如何在保證文件數(shù)據(jù)不被泄露、篡改、丟失的前提下,實(shí)現(xiàn)高

    2024年02月07日
    瀏覽(14)
  • 交換機(jī)不同vlan間如何通信?5分鐘了解清楚

    交換機(jī)不同vlan間如何通信?5分鐘了解清楚

    有朋友問(wèn)到,vlan間需要什么才能通信呢?如何讓不同vlan之間通信,我們通常提到了,vlan間通信需要三層交換機(jī),那么不用三層交換機(jī)能不能通信呢? ? 其實(shí)不同VLAN之間相互通信的兩種方式, 單臂路由、三層交換機(jī) ,它們分別如何配置呢?哪一種好呢? ? ? 本篇文章要從

    2024年02月15日
    瀏覽(28)
  • 交換機(jī)端口燈常亮 端口up狀態(tài) 服務(wù)器設(shè)置ip交換機(jī)獲取不到服務(wù)器網(wǎng)卡mac地址 不能通信

    交換機(jī)端口燈常亮 端口up狀態(tài) 服務(wù)器設(shè)置ip交換機(jī)獲取不到服務(wù)器網(wǎng)卡mac地址 不能通信

    深信服防火墻 8.0.75 AF-2000-FH2130B-SC S6520X-24ST-SI交換機(jī) version 7.1.070, Release 6530P02 交換機(jī)一個(gè)vlan下有3臺(tái)服務(wù)器,連接端口2、3、4,2和3連接的服務(wù)器正常,交換機(jī)3端口燈常亮 端口up狀態(tài) 服務(wù)器自動(dòng)獲取不了地址,改為手動(dòng)設(shè)置ip后,交換機(jī)查看arp表,獲取不到服務(wù)器網(wǎng)卡mac地址

    2024年02月02日
    瀏覽(27)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包