原文:xxhong.net/2016/12/01/ros-client/
ROS與Android的竊竊私語(yǔ)
2016-12-01|ROS纽甘,Android||1515
ROS (Robot Operating System, 機(jī)器人操作系統(tǒng)) 提供一系列程序庫(kù)和工具以幫助軟件開(kāi)發(fā)者創(chuàng)建機(jī)器人應(yīng)用軟件俩滥。它提供了硬件抽象当凡、設(shè)備驅(qū)動(dòng)析校、函數(shù)庫(kù)掐松、可視化工具侮腹、消息傳遞和軟件包管理等諸多功能缓苛。ROS遵循BSD開(kāi)源許可協(xié)議
Android是一種基于Linux的自由及開(kāi)放源代碼的操作系統(tǒng)嘴纺,主要使用于移動(dòng)設(shè)備几睛,如智能手機(jī)和平板電腦房轿,由Google公司和開(kāi)放手機(jī)聯(lián)盟領(lǐng)導(dǎo)及開(kāi)發(fā)
ROS嚴(yán)格來(lái)說(shuō)并不算OS,而是一套運(yùn)行于linux之上,連接機(jī)器人軟硬件的軟件包,而Android是針對(duì)于移動(dòng)端的定制Linux.我們主要來(lái)聊聊ROS與Android之間的通信
目前,ROS與Android主要的通信方式有兩種:
ROS的java語(yǔ)言實(shí)現(xiàn),借助該類庫(kù),能在Android上運(yùn)行ROS 節(jié)點(diǎn),功能強(qiáng)大,但是編譯比較麻煩,最大的問(wèn)題是ROS對(duì)其支持只到indigo版本!
通過(guò)Websocket以JSON格式的API為非ROS環(huán)境提供ROS通信支持,包括對(duì)Topic和Service的各種操作,這種通信方式輕量級(jí),跨平臺(tái)
接下來(lái)我們主要討論第二種方式的實(shí)現(xiàn)過(guò)程
了解通信協(xié)議rosbridge protocol
ROS端安裝對(duì)應(yīng)版本rosbridge-suite
1sudo apt-get install ros--rosbridge-suite
ROS端啟動(dòng)launch,你也可以include到自己的launch文件
1roslaunch rosbridge_server rosbridge_websocket.launch
Android端需要一個(gè)websocket的java實(shí)現(xiàn),然后就是按協(xié)議解析json,這好像也挺麻煩的嘛,不過(guò)好在找到一個(gè)開(kāi)源項(xiàng)目ROSBridgeClient,貌似是一個(gè)netbeans project,我是直接把源碼Copy到自己項(xiàng)目中來(lái),該庫(kù)依賴于java_websocket 和 json_simple兩個(gè)library,這樣就可以開(kāi)始寫你自己的邏輯代碼了
目前APK已實(shí)現(xiàn)功能有:
根據(jù)IP和連接到ROS
獲取ROS端所有Node list, Topic list, Service list
獲取指定Topic或者Service的請(qǐng)求參數(shù),并提供請(qǐng)求接口
針對(duì)Topic /cmd_vel 做了一個(gè)方向搖桿控制
針對(duì)Topic /map做了一個(gè)地圖的展示
理論上來(lái)說(shuō),應(yīng)該能在Android端實(shí)現(xiàn)rviz類似的功能,大家可以體驗(yàn)一下我實(shí)現(xiàn)的Demo(下載地址點(diǎn)我),最后放幾張截圖
轉(zhuǎn)載請(qǐng)注明出處:http://xxhong.net/2016/12/01/ros-client