1. 程式人生 > >andorid與ros互操作的關鍵點

andorid與ros互操作的關鍵點

如果想通過android裝置與基於ROS的機器人互操作,通常可選擇rosjava庫

rosjava可以看做是ros的java client library,所以可以像rospy、roscpp那樣在Linux終端使用

對於安卓,rosjava提供了一些android補充包(在github上跟rosjava屬於同一group)android_core等

如果你想開發能操控ros機器人的android app,儘量在android_core裡面的android_tutorial_pubsub工程裡新增自己的程式碼,因為gradle太複雜了

使用場景,只考慮roscore執行在機器人上的情況:

對於ros topic,如果安卓發,機器人收,則沒問題;如果機器人發,安卓收,則收不到,logcat顯示xmlrpc超時

經過一番摸索,終於發現關鍵點:機器人的ROS_IP環境變數沒配,導致安卓拿到的pub節點ip地址不對,配置成本機區域網IP後,通訊就正常了

解釋一下,ROS對於通訊,有2個環境變數,一個是ROS_MASTER_URI,一個是ROS_IP,二者在單機上是有點冗餘的,但在分散式網路上卻各司其職

ROS_MASTER_URI配置roscore執行在哪臺機器上,很好理解

ROS_IP配置本機(可能執行roscore也可能沒執行)所有ros node共用哪個IP與外界ros node通訊——因為本機上可能有多個網口,每個網口的IP不一樣,分別對應不同網路,所以一定要指定好自己選用的IP,如果不指定這個環境變數,則其他ros node與本機ros node通訊時,名稱解析會出錯!