rosjava service 與 server 通訊失敗 md5 校驗(yàn)失敗

開發(fā)ROS android 端遇到的問題 之 java 反射規(guī)則不符合校驗(yàn)要求失敗的問題

當(dāng)我們嘗試與ros service 通訊時(shí),通訊失敗凿滤,收到的提示。以前在項(xiàng)目中都是使用ros node 進(jìn)行topic 通訊庶近,第一次和同事在app 實(shí)現(xiàn)rosservice. 費(fèi)了很大的勁翁脆,搭建起開發(fā)環(huán)境開始做技術(shù)嘗試,這幾篇文章記錄這個(gè)項(xiàng)目遇到的相關(guān)問題鼻种。并簡要說明我們采用的解決方案反番。

2019-12-20?17:46:08.192?26580-26807/com.anzer.robot.navigation?E/AndroidRuntime:?FATAL?EXCEPTION:?pool-1-thread-96????Process:?com.anzer.robot.navigation,?PID:?26580????org.ros.exception.RosRuntimeException:?client?wants?service?/add_two_ints?to?have?md5sum?6ba90081e934800663a867fb3cb76f5a,?but?it?has?e3aba31982a34e28270141afefced002.?Dropping?connection.????????at?org.ros.internal.node.service.DefaultServiceClient.connect(DefaultServiceClient.java:140)????????at?org.ros.internal.node.service.ServiceFactory.newClient(ServiceFactory.java:146)????????at?org.ros.internal.node.DefaultNode.newServiceClient(DefaultNode.java:378)????????at?org.ros.internal.node.DefaultNode.newServiceClient(DefaultNode.java:385)????????at?com.anzer.robot.navigation.AddTwoIntService.add(AddTwoIntService.java:29)????????at?com.anzer.robot.navigation.AddTwoIntService.onStart(AddTwoIntService.java:69)????????at?org.ros.internal.node.DefaultNode$5.run(DefaultNode.java:520)????????at?org.ros.internal.node.DefaultNode$5.run(DefaultNode.java:517)????????at?org.ros.concurrent.EventDispatcher.loop(EventDispatcher.java:43)????????at?org.ros.concurrent.CancellableLoop.run(CancellableLoop.java:56)????????at?java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)????????at?java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)????????at?java.lang.Thread.run(Thread.java:776)

app 取到這個(gè)日志,在ros service 后臺(tái)也取到log

client wants service /add_two_ints to have md5sum 6ba90081e934800663a867fb3cb76f5a, but it has e3aba31982a34e28270141afefced002. Dropping connection.

拿到這個(gè)粒度的日志叉钥,首先分析日志罢缸。在這個(gè)過程中,client 端是app 發(fā)起的請(qǐng)求沼侣,它對(duì)應(yīng)的md5 是 6ba90081e934800663a867fb3cb76f5a祖能,不過server 端對(duì)應(yīng)的是 e3aba31982a34e28270141afefced002,不匹配蛾洛,所以切斷連接。

通過不斷嘗試雁芙,對(duì)照相關(guān)網(wǎng)絡(luò)上的資料轧膘,后來才理解。

原來ROS service 端會(huì)把 AddTwoInts.srv中的文本內(nèi)容計(jì)算 md5 的指紋和app 端的定義的message 類型兔甘。如果這兩個(gè)md5不匹配就返回上述的異常信息谎碍。

app 端的服務(wù)定義如下:

package cloud_msgs;

import org.ros.internal.message.Message;

public interface AddTwoIntsextends Message {

String_TYPE ="cloud_msgs/AddTwoInts";

? ? String_DEFINITION ="int64 a\nint64 b\n---\nint64 sum\n";

}


在不清楚rosjava 創(chuàng)建services 的流程,約束條件洞焙。解決問題的思路是找一個(gè)邏輯接近的場景蟆淀,可以運(yùn)行起來的程序拯啦,想起以前學(xué)習(xí)ros service 時(shí),對(duì)兩個(gè)數(shù)值求和的例子熔任。

1. 只有一個(gè)基本數(shù)據(jù)類型的情況

2. 如果弄清楚轉(zhuǎn)換規(guī)則褒链,再添加一個(gè)參數(shù)

3. 逐步把我們需要的參數(shù)都添加進(jìn)去,構(gòu)成項(xiàng)目中的自定義數(shù)據(jù)類型

多次試驗(yàn)得知:

+ 通過_TYPE反射生成對(duì)象疑苔,把“/” 替換為“.”,生成包路徑為 cloud_msgs.AddTwoInts 的對(duì)象

+ 根據(jù) _DEFINITION 反射生成 request 和response 接口

+ 剛開始我把 _DEFINITION 理解為注釋甫匹,就遇到到各種不同的md5 校驗(yàn)失敗的日志,參考別的msgs,如果要當(dāng)做注釋惦费,需要表達(dá)為 _DEFINITION="# comment"

c++??????????????????????????? java


int32??????????????????????? int

float32??????????????????? float

bool??????????????????????? boolean

int32[]??????????????????? int[]

string???????????????????? String/List


映射為這種關(guān)系兵迅,一步一步測試通過即可。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末薪贫,一起剝皮案震驚了整個(gè)濱河市恍箭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌瞧省,老刑警劉巖扯夭,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異臀突,居然都是意外死亡勉抓,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門候学,熙熙樓的掌柜王于貴愁眉苦臉地迎上來藕筋,“玉大人,你說我怎么就攤上這事梳码∫” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵掰茶,是天一觀的道長暇藏。 經(jīng)常有香客問我,道長濒蒋,這世上最難降的妖魔是什么盐碱? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮沪伙,結(jié)果婚禮上瓮顽,老公的妹妹穿的比我還像新娘。我一直安慰自己围橡,他們只是感情好暖混,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著翁授,像睡著了一般拣播。 火紅的嫁衣襯著肌膚如雪晾咪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天贮配,我揣著相機(jī)與錄音谍倦,去河邊找鬼。 笑死牧嫉,一個(gè)胖子當(dāng)著我的面吹牛剂跟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播酣藻,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼曹洽,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了辽剧?” 一聲冷哼從身側(cè)響起送淆,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎怕轿,沒想到半個(gè)月后偷崩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡撞羽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年阐斜,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片诀紊。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谒出,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出邻奠,到底是詐尸還是另有隱情笤喳,我是刑警寧澤,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布碌宴,位于F島的核電站杀狡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏贰镣。R本人自食惡果不足惜呜象,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望碑隆。 院中可真熱鬧董朝,春花似錦、人聲如沸干跛。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽楼入。三九已至哥捕,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嘉熊,已是汗流浹背遥赚。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阐肤,地道東北人凫佛。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長得像孕惜,于是被迫代替她去往敵國和親愧薛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容