亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種機(jī)器人動(dòng)態(tài)異步遠(yuǎn)程過(guò)程調(diào)用的方法和裝置與流程

文檔序號(hào):11323080閱讀:221來(lái)源:國(guó)知局
一種機(jī)器人動(dòng)態(tài)異步遠(yuǎn)程過(guò)程調(diào)用的方法和裝置與流程

本發(fā)明涉及機(jī)器人領(lǐng)域,尤其涉及一種機(jī)器人動(dòng)態(tài)異步遠(yuǎn)程過(guò)程調(diào)用的方法和裝置。



背景技術(shù):

ros(robotoperatingsystem)是開(kāi)源的機(jī)器人操作系統(tǒng),通過(guò)service實(shí)現(xiàn)遠(yuǎn)程過(guò)程調(diào)用(remoteprocedurecall,rpc)的功能。但是ros的service,僅支持同步調(diào)用的模式。因此,在應(yīng)用過(guò)程中,發(fā)起調(diào)用時(shí),必須等待回調(diào)結(jié)果,才能執(zhí)行線程內(nèi)后續(xù)任務(wù),因此會(huì)發(fā)生阻塞,影響機(jī)器人控制系統(tǒng)的實(shí)時(shí)性能。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明實(shí)施例提供一種機(jī)器人動(dòng)態(tài)異步遠(yuǎn)程過(guò)程調(diào)用的方法、裝置、機(jī)器人和存儲(chǔ)介質(zhì),以解決現(xiàn)有技術(shù)中機(jī)器人控制過(guò)程中任務(wù)阻塞,實(shí)時(shí)性能較差的問(wèn)題。

第一方面采用一種機(jī)器人動(dòng)態(tài)異步遠(yuǎn)程過(guò)程調(diào)用的方法,包括:

創(chuàng)建用于遠(yuǎn)程調(diào)用機(jī)器人的虛擬客戶端和構(gòu)造有請(qǐng)求隊(duì)列的虛擬服務(wù)端,創(chuàng)建基于互聯(lián)網(wǎng)通信引擎ice的支持異步遠(yuǎn)程調(diào)用的編程接口;

通過(guò)所述虛擬客戶端和編程接口發(fā)起調(diào)用函數(shù)將遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求發(fā)送到虛擬服務(wù)端;

若所述請(qǐng)求隊(duì)列中有未處理的請(qǐng)求,則將接收到的請(qǐng)求添加到所述請(qǐng)求隊(duì)列,并將所述請(qǐng)求隊(duì)列中的請(qǐng)求按請(qǐng)求隊(duì)列中的排序依次發(fā)送到所述機(jī)器人。

第二方面采用一種機(jī)器人動(dòng)態(tài)異步遠(yuǎn)程過(guò)程調(diào)用的裝置,包括:

初始化單元,用于創(chuàng)建用于遠(yuǎn)程調(diào)用機(jī)器人的虛擬客戶端和構(gòu)造有請(qǐng)求隊(duì)列的虛擬服務(wù)端,創(chuàng)建基于互聯(lián)網(wǎng)通信引擎ice的支持異步遠(yuǎn)程調(diào)用的編程接口;

請(qǐng)求發(fā)送單元,用于通過(guò)所述虛擬客戶端和編程接口發(fā)起調(diào)用函數(shù)將遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求發(fā)送到所述虛擬服務(wù)端;

第一處理單元,用于若所述請(qǐng)求隊(duì)列中有未處理的請(qǐng)求,則將接收到的請(qǐng)求添加到所述請(qǐng)求隊(duì)列,并將所述請(qǐng)求隊(duì)列中的請(qǐng)求按請(qǐng)求隊(duì)列中的排序依次發(fā)送到所述機(jī)器人。

第三方面采用一種機(jī)器人,所述機(jī)器人包括:

一個(gè)或多個(gè)處理器;

存儲(chǔ)器,用于存儲(chǔ)一個(gè)或多個(gè)程序,

當(dāng)所述一個(gè)或多個(gè)程序被一個(gè)或多個(gè)處理器執(zhí)行,使得所述一個(gè)或多個(gè)處理器實(shí)現(xiàn)如前文所述的機(jī)器人動(dòng)態(tài)異步遠(yuǎn)程過(guò)程調(diào)用的方法。

第四方面采用一種包含計(jì)算機(jī)可執(zhí)行指令的存儲(chǔ)介質(zhì),所述計(jì)算機(jī)可執(zhí)行指令在由計(jì)算機(jī)處理器執(zhí)行時(shí)用于執(zhí)行如前文所述的機(jī)器人動(dòng)態(tài)異步遠(yuǎn)程過(guò)程調(diào)用的方法。

本發(fā)明的有益效果為:設(shè)置基于ice的虛擬客戶端和虛擬服務(wù)端,由虛擬客戶端通過(guò)虛擬服務(wù)端向機(jī)器人發(fā)起遠(yuǎn)程過(guò)程調(diào)用,虛擬服務(wù)端中的請(qǐng)求隊(duì)列對(duì)遠(yuǎn)程過(guò)程調(diào)用進(jìn)行管理,將遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求依次發(fā)送到機(jī)器人;虛擬客戶端可以連續(xù)發(fā)送遠(yuǎn)程過(guò)程調(diào)用,無(wú)需等待一個(gè)遠(yuǎn)程過(guò)程調(diào)用的回調(diào)結(jié)果即可請(qǐng)求下一個(gè)遠(yuǎn)程過(guò)程調(diào)用,遠(yuǎn)程過(guò)程調(diào)用通過(guò)請(qǐng)求隊(duì)列管理避免任務(wù)阻塞,實(shí)現(xiàn)了遠(yuǎn)程過(guò)程調(diào)用的異步實(shí)現(xiàn)。

附圖說(shuō)明

為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)本發(fā)明實(shí)施例描述中所需要使用的附圖作簡(jiǎn)單的介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)本發(fā)明實(shí)施例的內(nèi)容和這些附圖獲得其它的附圖。

圖1是本發(fā)明具體實(shí)施方式中提供的一種機(jī)器人動(dòng)態(tài)異步遠(yuǎn)程過(guò)程調(diào)用的方法的第一實(shí)施例的方法流程圖。

圖2是本發(fā)明具體實(shí)施方式中提供的一種機(jī)器人動(dòng)態(tài)異步遠(yuǎn)程過(guò)程調(diào)用的方法的第二實(shí)施例的方法流程圖。

圖3是本發(fā)明具體實(shí)施方式中提供的一種機(jī)器人動(dòng)態(tài)異步遠(yuǎn)程過(guò)程調(diào)用的裝置的第一實(shí)施例的結(jié)構(gòu)方框圖。

圖4是本發(fā)明具體實(shí)施方式中提供的一種機(jī)器人動(dòng)態(tài)異步遠(yuǎn)程過(guò)程調(diào)用的裝置的第二實(shí)施例的結(jié)構(gòu)方框圖。

圖5是本發(fā)明具體實(shí)施方式中提供的一種機(jī)器人的結(jié)構(gòu)示意圖。

具體實(shí)施方式

為使本發(fā)明解決的技術(shù)問(wèn)題、采用的技術(shù)方案和達(dá)到的技術(shù)效果更加清楚,下面將結(jié)合附圖對(duì)本發(fā)明實(shí)施例的技術(shù)方案作進(jìn)一步的詳細(xì)描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其它實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。

請(qǐng)參考圖1,其是本發(fā)明具體實(shí)施方式中提供的一種機(jī)器人動(dòng)態(tài)異步遠(yuǎn)程過(guò)程調(diào)用的方法的第一實(shí)施例的方法流程圖,如圖所示,該方法包括:

步驟s101:創(chuàng)建用于遠(yuǎn)程調(diào)用機(jī)器人的虛擬客戶端和構(gòu)造有請(qǐng)求隊(duì)列的虛擬服務(wù)端,創(chuàng)建基于ice的支持異步遠(yuǎn)程調(diào)用的編程接口。

ice(internetcommunicationsengine,互聯(lián)網(wǎng)通信引擎)是一個(gè)中間件,該中間件的目的是為上層應(yīng)用提供高效的網(wǎng)絡(luò)通信。它提供面向?qū)ο蟮倪h(yuǎn)程調(diào)用、網(wǎng)格計(jì)算及發(fā)布/訂閱機(jī)制。ice可以運(yùn)行在大多數(shù)主流操作系統(tǒng)上,如linux,solaris,windows以及macosx,同時(shí)支持c++,java,.net語(yǔ)言(如c#或者visualbasic),objective‐c,python,php與ruby。ice應(yīng)用程序可以部署在多種環(huán)境下,虛擬客戶端和虛擬服務(wù)端可以使用不同的編程語(yǔ)言實(shí)現(xiàn);同時(shí)它可以運(yùn)行在不同的操作系統(tǒng)平臺(tái)以及不同的硬件架構(gòu)上,有效解決c/s模式兼容性差,開(kāi)發(fā)成本高等問(wèn)題。

現(xiàn)有技術(shù)中,用戶直接通過(guò)人機(jī)交互界面向機(jī)器人發(fā)送指令,相當(dāng)于虛擬客戶端直接對(duì)話機(jī)器人,只有在機(jī)器人對(duì)前一指令做出回復(fù)之后,用戶才能發(fā)送后一指令,也就是說(shuō)二者之間只能同步調(diào)用。在本方案中,創(chuàng)建基于ice的虛擬客戶端和虛擬服務(wù)端,人機(jī)交互界面設(shè)置在虛擬客戶端,用戶在虛擬客戶端操作輸入遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求,虛擬服務(wù)端設(shè)置有請(qǐng)求隊(duì)列,請(qǐng)求隊(duì)列用于對(duì)遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求進(jìn)行管理。需要說(shuō)明的是,本方案中的虛擬客戶端和虛擬服務(wù)端不是硬件主體上的區(qū)分,兩者實(shí)際上是虛擬存在,也就是說(shuō)虛擬客戶端和虛擬服務(wù)端可以設(shè)置在同一硬件主體上,也可以設(shè)置在不同的硬件主體上。另外,虛擬客戶端和虛擬服務(wù)端所在的硬件主體可以獨(dú)立設(shè)置并與機(jī)器人相連,也可以直接集成于機(jī)器人。

步驟s102:通過(guò)虛擬客戶端和編程接口發(fā)起調(diào)用函數(shù)將遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求發(fā)送到虛擬服務(wù)端。

遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求由用戶在人機(jī)操作界面輸入,用以實(shí)現(xiàn)對(duì)機(jī)器人的控制,虛擬客戶端不直接與機(jī)器人交互,而是將遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求發(fā)送到虛擬服務(wù)端,由虛擬服務(wù)端對(duì)遠(yuǎn)程過(guò)程調(diào)用進(jìn)行處理。

步驟s103:若請(qǐng)求隊(duì)列中有未處理的請(qǐng)求,則將接收到的請(qǐng)求添加到請(qǐng)求隊(duì)列,并將請(qǐng)求隊(duì)列中的請(qǐng)求按請(qǐng)求隊(duì)列中的排序依次發(fā)送到機(jī)器人。

虛擬服務(wù)端在收到遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求后,根據(jù)請(qǐng)求隊(duì)列的當(dāng)前狀態(tài)進(jìn)行處理,如果請(qǐng)求隊(duì)列中有未處理的請(qǐng)求,因?yàn)闄C(jī)器人不能同時(shí)響應(yīng)多個(gè)指令,此時(shí)需要先將收到的請(qǐng)求添加到請(qǐng)求隊(duì)列中。反之,如果請(qǐng)求隊(duì)列中沒(méi)有未處理的遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求,說(shuō)明此時(shí)機(jī)器人可以響應(yīng)新的指令,直接將遠(yuǎn)程過(guò)程請(qǐng)求發(fā)送到機(jī)器人即可。

綜上所述,設(shè)置基于ice的虛擬客戶端和虛擬服務(wù)端,由虛擬客戶端通過(guò)虛擬服務(wù)端向機(jī)器人發(fā)起遠(yuǎn)程過(guò)程調(diào)用,虛擬服務(wù)端中的請(qǐng)求隊(duì)列對(duì)遠(yuǎn)程過(guò)程調(diào)用進(jìn)行管理,將遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求依次發(fā)送到機(jī)器人;虛擬客戶端可以連續(xù)發(fā)送遠(yuǎn)程過(guò)程調(diào)用,無(wú)需等待一個(gè)遠(yuǎn)程過(guò)程調(diào)用的回調(diào)結(jié)果即可請(qǐng)求下一個(gè)遠(yuǎn)程過(guò)程調(diào)用,遠(yuǎn)程過(guò)程調(diào)用通過(guò)請(qǐng)求隊(duì)列管理避免任務(wù)阻塞,實(shí)現(xiàn)了遠(yuǎn)程過(guò)程調(diào)用的異步實(shí)現(xiàn)。

請(qǐng)參考圖2,其是本發(fā)明具體實(shí)施方式中提供的一種機(jī)器人動(dòng)態(tài)異步遠(yuǎn)程過(guò)程調(diào)用的方法的第二實(shí)施例的方法流程圖,如圖所示,該方法包括:

步驟s201:創(chuàng)建用于遠(yuǎn)程調(diào)用機(jī)器人的虛擬客戶端和構(gòu)造有請(qǐng)求隊(duì)列的虛擬服務(wù)端,創(chuàng)建基于ice的支持異步遠(yuǎn)程調(diào)用的編程接口。

ice的跨平臺(tái)和跨語(yǔ)言主要基于slice(specificationlanguageofice,ice的特定對(duì)象定義語(yǔ)言)實(shí)現(xiàn)。通過(guò)ice的slice語(yǔ)言設(shè)計(jì)遠(yuǎn)程過(guò)程調(diào)用接口文件,通過(guò)ice提供的slice編譯器將接口文件編譯為目標(biāo)編程語(yǔ)言,并提供一系列支持異步遠(yuǎn)程調(diào)用的編程接口。目標(biāo)編程語(yǔ)言可以是c/c++,java,java-script,python,ruby。不管目標(biāo)編程語(yǔ)言是什么,實(shí)現(xiàn)的基礎(chǔ)都是基于ice的虛擬客戶端和虛擬服務(wù)端。

步驟s202:將接收到的遠(yuǎn)程過(guò)程調(diào)用根據(jù)模板定義生成請(qǐng)求數(shù)據(jù)包,將請(qǐng)求數(shù)據(jù)包轉(zhuǎn)換為序列化的二進(jìn)制數(shù)據(jù)包。

在遠(yuǎn)程過(guò)程調(diào)用過(guò)程中,傳遞的數(shù)據(jù)包以模板定義,也就是建立各種遠(yuǎn)程過(guò)程調(diào)用的數(shù)據(jù)模板,通過(guò)調(diào)用ros::serialization::serialize方法或protobuf方法轉(zhuǎn)換為序列化的二進(jìn)制數(shù)據(jù)包,數(shù)據(jù)模板具體以序列化的二進(jìn)制形式的數(shù)據(jù)包的形式進(jìn)行傳遞。當(dāng)然,也可以通過(guò)其它基于標(biāo)準(zhǔn)格式的方式進(jìn)行傳遞。

在虛擬客戶端,通過(guò)預(yù)先生成的成員函數(shù)發(fā)起異步的遠(yuǎn)程過(guò)程調(diào)用,將請(qǐng)求數(shù)據(jù)直接發(fā)出去,在該成員函數(shù)的定義中,若當(dāng)前請(qǐng)求有積壓,則先放到請(qǐng)求隊(duì)列中,不會(huì)阻塞當(dāng)前的調(diào)用線程。

成員函數(shù)中定義了請(qǐng)求的數(shù)據(jù)模板,成員函數(shù)的形式為<int(string,模板,模板,模板)>,第一個(gè)參數(shù)是string類型的指令標(biāo)識(shí)符。第二至第四個(gè)參數(shù)是用template定義的模板,支持用戶在使用時(shí)指定數(shù)據(jù)類型,發(fā)起異步調(diào)用時(shí),調(diào)用ros::serialization::serialize方法或protobuf方法將第二個(gè)參數(shù)至第四個(gè)參數(shù)轉(zhuǎn)換成序列化的二進(jìn)制形式的數(shù)據(jù)包。

步驟s203:將二進(jìn)制數(shù)據(jù)包通過(guò)虛擬客戶端和編程接口發(fā)送到虛擬服務(wù)端。

步驟s204:在虛擬服務(wù)端將二進(jìn)制數(shù)據(jù)包反序列化,生成根據(jù)模板定義的請(qǐng)求數(shù)據(jù)包。

虛擬服務(wù)端收到二進(jìn)制數(shù)據(jù)包之后通過(guò)調(diào)用ros::serialization::deserialize,將二進(jìn)制數(shù)據(jù)包反序列化,成為以模板定義的數(shù)據(jù)包格式。

步驟s205:若請(qǐng)求隊(duì)列中有未處理的請(qǐng)求,則將接收到的請(qǐng)求添加到請(qǐng)求隊(duì)列,并將請(qǐng)求隊(duì)列中的請(qǐng)求按請(qǐng)求隊(duì)列中的排序依次發(fā)送到機(jī)器人;否則,將請(qǐng)求發(fā)送到機(jī)器人。

該步驟中執(zhí)行的是對(duì)請(qǐng)求隊(duì)列中未處理的遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求進(jìn)行處理的過(guò)程,按照請(qǐng)求產(chǎn)生的時(shí)序,依次發(fā)送到機(jī)器人。遠(yuǎn)程過(guò)程調(diào)用發(fā)送到機(jī)器人以及機(jī)器人對(duì)遠(yuǎn)程過(guò)程調(diào)用進(jìn)行響應(yīng)的過(guò)程與現(xiàn)有技術(shù)中控制機(jī)器人的過(guò)程相同,在此不做另行說(shuō)明。

需要說(shuō)明的是,不管是收到遠(yuǎn)程過(guò)程調(diào)用后直接發(fā)送到機(jī)器人還是將請(qǐng)求隊(duì)列中的遠(yuǎn)程過(guò)程調(diào)用請(qǐng)求發(fā)送到機(jī)器人,都是在收到前一次遠(yuǎn)程過(guò)程調(diào)用請(qǐng)求的回調(diào)結(jié)果后才發(fā)送,

步驟s206:向虛擬客戶端返回用于查詢請(qǐng)求的調(diào)用狀態(tài)的查詢對(duì)象,以通過(guò)查詢對(duì)象查詢調(diào)用是否完成和獲取調(diào)用結(jié)果。

調(diào)用結(jié)果通過(guò)虛擬服務(wù)端返回到虛擬客戶端,具體可以在虛擬服務(wù)端建立回調(diào)函數(shù)機(jī)制,用戶在使用時(shí),通過(guò)傳遞函數(shù)指針,實(shí)現(xiàn)對(duì)虛擬服務(wù)端的回調(diào)函數(shù)的動(dòng)態(tài)綁定。當(dāng)然,也以由虛擬服務(wù)端對(duì)收到的調(diào)用結(jié)果直接進(jìn)行響應(yīng),在接收到調(diào)用結(jié)果后將調(diào)用結(jié)果返回到虛擬客戶端。

具體而言,定義一個(gè)函數(shù)指針類型的公共數(shù)據(jù)成員:調(diào)用boost::function方法,定義<int(string,bytes,bytes,bytes)>類型的函數(shù)指針m_fp;然后定義一個(gè)<void(fp)>類型的成員函數(shù),本文為描述方便將該函數(shù)記為registerf,建立虛擬服務(wù)端回調(diào)函數(shù)注冊(cè)機(jī)制:該成員函數(shù)的參數(shù)為函數(shù)指針fp,成員函數(shù)內(nèi)部的關(guān)鍵行為是將參數(shù)fp賦值給函數(shù)指針類型的公共數(shù)據(jù)成員m_fp;對(duì)于虛擬服務(wù)端類i_a,會(huì)生成純虛函數(shù),該純虛函數(shù)的名字也是o_a,虛擬服務(wù)端需要對(duì)其繼承的i_a類純虛函數(shù)o_a,進(jìn)行實(shí)現(xiàn);當(dāng)請(qǐng)求隊(duì)列有元素時(shí),會(huì)自動(dòng)觸發(fā)o_a函數(shù)。o_a函數(shù)實(shí)現(xiàn)過(guò)程中有關(guān)鍵行為有一個(gè):以o_a函數(shù)被觸發(fā)時(shí),從虛擬客戶端傳入的(string,bytes,bytes,bytes)類型的四個(gè)參數(shù),作為參數(shù),調(diào)用函數(shù)指針m_fp。這樣用戶在使用時(shí),通過(guò)調(diào)用registerf傳遞不同的函數(shù)指針,即可實(shí)現(xiàn)對(duì)虛擬服務(wù)端的異步回調(diào)響應(yīng)函數(shù)進(jìn)行動(dòng)態(tài)綁定。

虛擬客戶端在收到調(diào)用結(jié)構(gòu)后可以與發(fā)送請(qǐng)求的記錄進(jìn)行對(duì)應(yīng)保存?zhèn)浞?,以供后續(xù)對(duì)操作過(guò)程進(jìn)行分析。

步驟s207:將狀態(tài)查詢指令通過(guò)編程接口從虛擬客戶端發(fā)送到虛擬服務(wù)端以查詢請(qǐng)求隊(duì)列中請(qǐng)求的狀態(tài)信息。

步驟s208:將狀態(tài)信息通過(guò)編程接口從虛擬服務(wù)端返回到虛擬客戶端。

為便于用戶監(jiān)控遠(yuǎn)程過(guò)程調(diào)用的執(zhí)行情況,用戶可以發(fā)送指令到虛擬服務(wù)端查詢請(qǐng)求隊(duì)列的狀態(tài),例如剩余請(qǐng)求的個(gè)數(shù),內(nèi)容,預(yù)計(jì)執(zhí)行時(shí)間等。

步驟s209:根據(jù)狀態(tài)信息生成請(qǐng)求調(diào)整指令,并將請(qǐng)求調(diào)整指令通過(guò)編程接口從虛擬客戶端發(fā)送到虛擬服務(wù)端對(duì)請(qǐng)求隊(duì)列中的請(qǐng)求進(jìn)行刪除或順序調(diào)整。

如有必要,用戶可以生成請(qǐng)求隊(duì)列的操作指令,虛擬客戶端在接收到操作指令后對(duì)請(qǐng)求隊(duì)列中的請(qǐng)求進(jìn)行刪除、順序調(diào)整等操作,但是因?yàn)闄C(jī)器人執(zhí)行操作的時(shí)序性要求很高,這樣的操作需要維持指令前后的嚴(yán)謹(jǐn)?shù)倪壿嬓浴?/p>

綜上所述,設(shè)置基于ice的虛擬客戶端和虛擬服務(wù)端,由虛擬客戶端通過(guò)虛擬服務(wù)端向機(jī)器人發(fā)起遠(yuǎn)程過(guò)程調(diào)用,虛擬服務(wù)端中的請(qǐng)求隊(duì)列對(duì)遠(yuǎn)程過(guò)程調(diào)用進(jìn)行管理,將遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求依次發(fā)送到機(jī)器人;虛擬客戶端可以連續(xù)發(fā)送遠(yuǎn)程過(guò)程調(diào)用,無(wú)需等待一個(gè)遠(yuǎn)程過(guò)程調(diào)用的回調(diào)結(jié)果即可請(qǐng)求下一個(gè)遠(yuǎn)程過(guò)程調(diào)用,遠(yuǎn)程過(guò)程調(diào)用通過(guò)請(qǐng)求隊(duì)列管理避免任務(wù)阻塞,實(shí)現(xiàn)了遠(yuǎn)程過(guò)程調(diào)用的異步實(shí)現(xiàn)。同時(shí),對(duì)遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求的后續(xù)處理使得用戶能夠更好地對(duì)運(yùn)行過(guò)程進(jìn)行監(jiān)控。

以下為本發(fā)明具體實(shí)施方式中的提供的一種機(jī)器人動(dòng)態(tài)異步遠(yuǎn)程過(guò)程調(diào)用的裝置的實(shí)施例,裝置的實(shí)施例基于前述的方法的實(shí)施例實(shí)現(xiàn),在裝置的實(shí)施例中未盡的描述,請(qǐng)參考前述的方法的實(shí)施例。

請(qǐng)參考圖3,其是本發(fā)明具體實(shí)施方式中提供的一種機(jī)器人動(dòng)態(tài)異步遠(yuǎn)程過(guò)程調(diào)用的裝置的第一實(shí)施例的結(jié)構(gòu)方框圖,如圖所示,該裝置包括:

初始化單元310,用于創(chuàng)建用于遠(yuǎn)程調(diào)用機(jī)器人的虛擬客戶端和構(gòu)造有請(qǐng)求隊(duì)列的虛擬服務(wù)端,創(chuàng)建基于互聯(lián)網(wǎng)通信引擎ice的支持異步遠(yuǎn)程調(diào)用的編程接口;

請(qǐng)求發(fā)送單元320,用于通過(guò)所述虛擬客戶端和編程接口發(fā)起調(diào)用函數(shù)將遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求發(fā)送到虛擬服務(wù)端;

第一處理單元330,用于若所述請(qǐng)求隊(duì)列中有未處理的請(qǐng)求,則將接收到的請(qǐng)求添加到所述請(qǐng)求隊(duì)列,并將所述請(qǐng)求隊(duì)列中的請(qǐng)求按請(qǐng)求隊(duì)列中的排序依次發(fā)送到所述機(jī)器人。

綜上所述,上述各單元的協(xié)同運(yùn)轉(zhuǎn),設(shè)置基于ice的虛擬客戶端和虛擬服務(wù)端,由虛擬客戶端通過(guò)虛擬服務(wù)端向機(jī)器人發(fā)起遠(yuǎn)程過(guò)程調(diào)用,虛擬服務(wù)端中的請(qǐng)求隊(duì)列對(duì)遠(yuǎn)程過(guò)程調(diào)用進(jìn)行管理,將遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求依次發(fā)送到機(jī)器人;虛擬客戶端可以連續(xù)發(fā)送遠(yuǎn)程過(guò)程調(diào)用,無(wú)需等待一個(gè)遠(yuǎn)程過(guò)程調(diào)用的回調(diào)結(jié)果即可請(qǐng)求下一個(gè)遠(yuǎn)程過(guò)程調(diào)用,遠(yuǎn)程過(guò)程調(diào)用通過(guò)請(qǐng)求隊(duì)列管理避免任務(wù)阻塞,實(shí)現(xiàn)了遠(yuǎn)程過(guò)程調(diào)用的異步實(shí)現(xiàn)。

請(qǐng)參考圖4,其是本發(fā)明具體實(shí)施方式中提供的一種機(jī)器人動(dòng)態(tài)異步遠(yuǎn)程過(guò)程調(diào)用的裝置的第二實(shí)施例的結(jié)構(gòu)方框圖,如圖所示,該裝置包括:

初始化單元310,用于創(chuàng)建用于遠(yuǎn)程調(diào)用機(jī)器人的虛擬客戶端和構(gòu)造有請(qǐng)求隊(duì)列的虛擬服務(wù)端,創(chuàng)建基于ice的支持異步遠(yuǎn)程調(diào)用的編程接口;

請(qǐng)求發(fā)送單元320,用于由所述虛擬客戶端通過(guò)所述編程接口發(fā)起調(diào)用函數(shù)將遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求發(fā)送到虛擬服務(wù)端;

第一處理單元330,用于若所述請(qǐng)求隊(duì)列中有未處理的請(qǐng)求,則將接收到的請(qǐng)求添加到所述請(qǐng)求隊(duì)列,并將所述請(qǐng)求隊(duì)列中的請(qǐng)求按請(qǐng)求隊(duì)列中的排序依次發(fā)送到所述機(jī)器人。

其中,還包括:

第二處理單元340,具體用于若所述請(qǐng)求隊(duì)列為空,則通過(guò)所述虛擬服務(wù)端將所述請(qǐng)求發(fā)送到所述機(jī)器人。

其中,所述裝置,還包括:

結(jié)果返回單元350,用于向所述虛擬客戶端返回用于查詢所述請(qǐng)求的調(diào)用狀態(tài)的查詢對(duì)象,

以通過(guò)所述查詢對(duì)象查詢調(diào)用是否完成和獲取調(diào)用結(jié)果。

其中,所述裝置,還包括:

狀態(tài)查詢單元360,用于將狀態(tài)查詢指令通過(guò)所述編程接口從虛擬客戶端發(fā)送到虛擬服務(wù)端以查詢所述請(qǐng)求隊(duì)列中請(qǐng)求的狀態(tài)信息;

信息反饋單元370,用于將所述狀態(tài)信息通過(guò)所述編程接口從虛擬服務(wù)端返回到虛擬客戶端。

其中,所述裝置,還包括:

隊(duì)列調(diào)整單元380,用于根據(jù)所述狀態(tài)信息生成請(qǐng)求調(diào)整指令,并將所述請(qǐng)求調(diào)整指令通過(guò)所述編程接口從虛擬客戶端發(fā)送到虛擬服務(wù)端對(duì)所述請(qǐng)求隊(duì)列中的請(qǐng)求進(jìn)行刪除或順序調(diào)整。

其中,所述調(diào)用請(qǐng)求單元320,包括:

參數(shù)編碼模塊321,用于將接收到的遠(yuǎn)程過(guò)程調(diào)用根據(jù)模板定義生成請(qǐng)求數(shù)據(jù)包,將所述請(qǐng)求數(shù)據(jù)包轉(zhuǎn)換為序列化的二進(jìn)制數(shù)據(jù)包;

數(shù)據(jù)發(fā)送模塊322,用于將所述二進(jìn)制數(shù)據(jù)包通過(guò)虛擬客戶端和編程接口發(fā)送到虛擬服務(wù)端;

數(shù)據(jù)解碼模塊323,用于由所述虛擬服務(wù)端將所述二進(jìn)制數(shù)據(jù)包反序列化,生成根據(jù)模板定義的請(qǐng)求數(shù)據(jù)包。

綜上所述,上述各單元的協(xié)同運(yùn)轉(zhuǎn),設(shè)置基于ice的虛擬客戶端和虛擬服務(wù)端,由虛擬客戶端通過(guò)虛擬服務(wù)端向機(jī)器人發(fā)起遠(yuǎn)程過(guò)程調(diào)用,虛擬服務(wù)端中的請(qǐng)求隊(duì)列對(duì)遠(yuǎn)程過(guò)程調(diào)用進(jìn)行管理,將遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求依次發(fā)送到機(jī)器人;虛擬客戶端可以連續(xù)發(fā)送遠(yuǎn)程過(guò)程調(diào)用,無(wú)需等待一個(gè)遠(yuǎn)程過(guò)程調(diào)用的回調(diào)結(jié)果即可請(qǐng)求下一個(gè)遠(yuǎn)程過(guò)程調(diào)用,遠(yuǎn)程過(guò)程調(diào)用通過(guò)請(qǐng)求隊(duì)列管理避免任務(wù)阻塞,實(shí)現(xiàn)了遠(yuǎn)程過(guò)程調(diào)用的異步實(shí)現(xiàn)。同時(shí),對(duì)遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求的后續(xù)處理使得用戶能夠更好地對(duì)運(yùn)行過(guò)程進(jìn)行監(jiān)控。

請(qǐng)參考圖5,其是為本發(fā)明具體實(shí)施方式中提供的一種機(jī)器人的結(jié)構(gòu)示意圖。圖5示出了適于用來(lái)實(shí)現(xiàn)本發(fā)明實(shí)施方式的示例性機(jī)器人12的框圖。圖5顯示的機(jī)器人12僅僅是一個(gè)示例,不應(yīng)對(duì)本發(fā)明實(shí)施例的功能和使用范圍帶來(lái)任何限制。

如圖5所示,機(jī)器人12實(shí)現(xiàn)數(shù)據(jù)處理以及交互的功能組件以通用計(jì)算設(shè)備的形式表現(xiàn)。機(jī)器人12的組件可以包括但不限于:一個(gè)或者多個(gè)處理器或者處理單元16,系統(tǒng)存儲(chǔ)器28,連接不同系統(tǒng)組件(包括系統(tǒng)存儲(chǔ)器28和處理單元16)的總線18。

總線18表示幾類總線結(jié)構(gòu)中的一種或多種,包括存儲(chǔ)器總線或者存儲(chǔ)器控制器,外圍總線,圖形加速端口,處理器或者使用多種總線結(jié)構(gòu)中的任意總線結(jié)構(gòu)的局域總線。舉例來(lái)說(shuō),這些體系結(jié)構(gòu)包括但不限于工業(yè)標(biāo)準(zhǔn)體系結(jié)構(gòu)(isa)總線,微通道體系結(jié)構(gòu)(mac)總線,增強(qiáng)型isa總線、視頻電子標(biāo)準(zhǔn)協(xié)會(huì)(vesa)局域總線以及外圍組件互連(pci)總線。

機(jī)器人12典型地包括多種計(jì)算機(jī)系統(tǒng)可讀介質(zhì)。這些介質(zhì)可以是任何能夠被機(jī)器人12訪問(wèn)的可用介質(zhì),包括易失性和非易失性介質(zhì),可移動(dòng)的和不可移動(dòng)的介質(zhì)。

系統(tǒng)存儲(chǔ)器28可以包括易失性存儲(chǔ)器形式的計(jì)算機(jī)系統(tǒng)可讀介質(zhì),例如隨機(jī)存取存儲(chǔ)器(ram)30和/或高速緩存存儲(chǔ)器32。機(jī)器人12可以進(jìn)一步包括其它可移動(dòng)/不可移動(dòng)的、易失性/非易失性計(jì)算機(jī)系統(tǒng)存儲(chǔ)介質(zhì)。僅作為舉例,存儲(chǔ)系統(tǒng)34可以用于讀寫不可移動(dòng)的、非易失性磁介質(zhì)(圖5未顯示,通常稱為“硬盤驅(qū)動(dòng)器”)。盡管圖5中未示出,可以提供用于對(duì)可移動(dòng)非易失性磁盤(例如“軟盤”)讀寫的磁盤驅(qū)動(dòng)器,以及對(duì)可移動(dòng)非易失性光盤(例如cd-rom,dvd-rom或者其它光介質(zhì))讀寫的光盤驅(qū)動(dòng)器。在這些情況下,每個(gè)驅(qū)動(dòng)器可以通過(guò)一個(gè)或者多個(gè)數(shù)據(jù)介質(zhì)接口與總線18相連。存儲(chǔ)器28可以包括至少一個(gè)程序產(chǎn)品,該程序產(chǎn)品具有一組(例如至少一個(gè))程序模塊,這些程序模塊被配置以執(zhí)行本發(fā)明各實(shí)施例的功能。

具有一組(至少一個(gè))程序模塊42的程序/實(shí)用工具40,可以存儲(chǔ)在例如存儲(chǔ)器28中,這樣的程序模塊42包括——但不限于——操作系統(tǒng)、一個(gè)或者多個(gè)應(yīng)用程序、其它程序模塊以及程序數(shù)據(jù),這些示例中的每一個(gè)或某種組合中可能包括網(wǎng)絡(luò)環(huán)境的實(shí)現(xiàn)。程序模塊42通常執(zhí)行本發(fā)明所描述的實(shí)施例中的功能和/或方法。

機(jī)器人12也可以與一個(gè)或多個(gè)外部設(shè)備14(例如鍵盤、指向設(shè)備、顯示器24等)通信,還可與一個(gè)或者多個(gè)使得用戶能與該機(jī)器人12交互的設(shè)備通信,和/或與使得該機(jī)器人12能與一個(gè)或多個(gè)其它計(jì)算設(shè)備進(jìn)行通信的任何設(shè)備(例如網(wǎng)卡,調(diào)制解調(diào)器等等)通信。這種通信可以通過(guò)輸入/輸出(i/o)接口22進(jìn)行。并且,計(jì)算機(jī)設(shè)備12還可以通過(guò)網(wǎng)絡(luò)適配器20與一個(gè)或者多個(gè)網(wǎng)絡(luò)(例如局域網(wǎng)(lan),廣域網(wǎng)(wan)和/或公共網(wǎng)絡(luò),例如因特網(wǎng))通信。如圖所示,網(wǎng)絡(luò)適配器20通過(guò)總線18與機(jī)器人12的其它模塊通信。應(yīng)當(dāng)明白,盡管圖5中未示出,可以結(jié)合機(jī)器人12使用其它硬件和/或軟件模塊,包括但不限于:微代碼、設(shè)備驅(qū)動(dòng)器、冗余處理單元、外部磁盤驅(qū)動(dòng)陣列、raid系統(tǒng)、磁帶驅(qū)動(dòng)器以及數(shù)據(jù)備份存儲(chǔ)系統(tǒng)等。

處理單元16通過(guò)運(yùn)行存儲(chǔ)在系統(tǒng)存儲(chǔ)器28中的程序,從而執(zhí)行各種功能應(yīng)用以及數(shù)據(jù)處理,例如實(shí)現(xiàn)本發(fā)明實(shí)施例所提供的機(jī)器人動(dòng)態(tài)異步遠(yuǎn)程過(guò)程調(diào)用的方法:

也即,所述處理單元16執(zhí)行所述程序時(shí)實(shí)現(xiàn):創(chuàng)建用于遠(yuǎn)程調(diào)用機(jī)器人的虛擬客戶端和構(gòu)造有請(qǐng)求隊(duì)列的虛擬服務(wù)端,創(chuàng)建基于互聯(lián)網(wǎng)通信引擎ice的支持異步遠(yuǎn)程調(diào)用的編程接口;通過(guò)所述虛擬客戶端和編程接口發(fā)起調(diào)用函數(shù)將遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求發(fā)送到所述虛擬服務(wù)端;若所述請(qǐng)求隊(duì)列中有未處理的請(qǐng)求,則將接收到的請(qǐng)求添加到所述請(qǐng)求隊(duì)列,并將所述請(qǐng)求隊(duì)列中的請(qǐng)求按請(qǐng)求隊(duì)列中的排序依次發(fā)送到所述機(jī)器人。

本發(fā)明具體實(shí)施方式中還提供了一種計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其上存儲(chǔ)有計(jì)算機(jī)程序,該程序被處理器執(zhí)行時(shí)實(shí)現(xiàn)如本申請(qǐng)所有發(fā)明實(shí)施例提供的機(jī)器人動(dòng)態(tài)異步遠(yuǎn)程過(guò)程調(diào)用的方法:

也即,該程序被處理器執(zhí)行時(shí)實(shí)現(xiàn):創(chuàng)建用于遠(yuǎn)程調(diào)用機(jī)器人的虛擬客戶端和構(gòu)造有請(qǐng)求隊(duì)列的虛擬服務(wù)端,創(chuàng)建基于互聯(lián)網(wǎng)通信引擎ice的支持異步遠(yuǎn)程調(diào)用的編程接口;通過(guò)所述虛擬客戶端和編程接口發(fā)起調(diào)用函數(shù)將遠(yuǎn)程過(guò)程調(diào)用的請(qǐng)求發(fā)送到所述虛擬服務(wù)端;若所述請(qǐng)求隊(duì)列中有未處理的請(qǐng)求,則將接收到的請(qǐng)求添加到所述請(qǐng)求隊(duì)列,并將所述請(qǐng)求隊(duì)列中的請(qǐng)求按請(qǐng)求隊(duì)列中的排序依次發(fā)送到所述機(jī)器人。

可以采用一個(gè)或多個(gè)計(jì)算機(jī)可讀的介質(zhì)的任意組合。計(jì)算機(jī)可讀介質(zhì)可以是計(jì)算機(jī)可讀信號(hào)介質(zhì)或者計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)例如可以是——但不限于——電、磁、光、電磁、紅外線、或半導(dǎo)體的系統(tǒng)、裝置或器件,或者任意以上的組合。計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的更具體的例子(非窮舉的列表)包括:具有一個(gè)或多個(gè)導(dǎo)線的電連接、便攜式計(jì)算機(jī)磁盤、硬盤、隨機(jī)存取存儲(chǔ)器(ram)、只讀存儲(chǔ)器(rom)、可擦式可編程只讀存儲(chǔ)器(eprom或閃存)、光纖、便攜式緊湊磁盤只讀存儲(chǔ)器(cd-rom)、光存儲(chǔ)器件、磁存儲(chǔ)器件、或者上述的任意合適的組合。在本文件中,計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)可以是任何包含或存儲(chǔ)程序的有形介質(zhì),該程序可以被指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用。

計(jì)算機(jī)可讀的信號(hào)介質(zhì)可以包括在基帶中或者作為載波一部分傳播的數(shù)據(jù)信號(hào),其中承載了計(jì)算機(jī)可讀的程序代碼。這種傳播的數(shù)據(jù)信號(hào)可以采用多種形式,包括——但不限于——電磁信號(hào)、光信號(hào)或上述的任意合適的組合。計(jì)算機(jī)可讀的信號(hào)介質(zhì)還可以是計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)以外的任何計(jì)算機(jī)可讀介質(zhì),該計(jì)算機(jī)可讀介質(zhì)可以發(fā)送、傳播或者傳輸用于由指令執(zhí)行系統(tǒng)、裝置或者器件使用或者與其結(jié)合使用的程序。

計(jì)算機(jī)可讀介質(zhì)上包含的程序代碼可以用任何適當(dāng)?shù)慕橘|(zhì)傳輸,包括——但不限于——無(wú)線、電線、光纜、rf等等,或者上述的任意合適的組合。

可以以一種或多種程序設(shè)計(jì)語(yǔ)言或其組合來(lái)編寫用于執(zhí)行本發(fā)明操作的計(jì)算機(jī)程序代碼,所述程序設(shè)計(jì)語(yǔ)言包括面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言—諸如java、smalltalk、c++,還包括常規(guī)的過(guò)程式程序設(shè)計(jì)語(yǔ)言—諸如“c”語(yǔ)言或類似的程序設(shè)計(jì)語(yǔ)言。程序代碼可以完全地在用戶計(jì)算機(jī)上執(zhí)行、部分地在用戶計(jì)算機(jī)上執(zhí)行、作為一個(gè)獨(dú)立的軟件包執(zhí)行、部分在用戶計(jì)算機(jī)上部分在遠(yuǎn)程計(jì)算機(jī)上執(zhí)行、或者完全在遠(yuǎn)程計(jì)算機(jī)或服務(wù)器上執(zhí)行。在涉及遠(yuǎn)程計(jì)算機(jī)的情形中,遠(yuǎn)程計(jì)算機(jī)可以通過(guò)任意種類的網(wǎng)絡(luò)——包括局域網(wǎng)(lan)或廣域網(wǎng)(wan)—連接到用戶計(jì)算機(jī),或者,可以連接到外部計(jì)算機(jī)(例如利用因特網(wǎng)服務(wù)提供商來(lái)通過(guò)因特網(wǎng)連接)。

以上結(jié)合具體實(shí)施例描述了本發(fā)明的技術(shù)原理。這些描述只是為了解釋本發(fā)明的原理,而不能以任何方式解釋為對(duì)本發(fā)明保護(hù)范圍的限制?;诖颂幍慕忉?,本領(lǐng)域的技術(shù)人員不需要付出創(chuàng)造性的勞動(dòng)即可聯(lián)想到本發(fā)明的其它具體實(shí)施方式,這些方式都將落入本發(fā)明的保護(hù)范圍之內(nèi)。

當(dāng)前第1頁(yè)1 2 
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1