通過rosjava實現android訂閱ROS自定義消息

android要與ROS通訊,首先要有rosjava庫,這玩意兒類似於ROS官方支持的rospy  roscpp等,也是ROS分佈式計算平臺的一種language binding

可惜rosjava出現的太晚,不夠成熟,文檔也很不詳細,社區活躍度也不高,很多問題都是沒有任何搜索引擎能幫上忙的

我們的機器人配備了一塊android平板,要顯示底盤的電量信息,這就要訂閱底盤上ROS通過/battery_state這個topic發佈的電池電量message,但該message的消息類型並不是標準的std_msgs.String之類,而是qbo_arduqbo.BatteryLevel這個自定義類型,怎麼辦呢?看下面

前提

準備rosjava環境,有2個選項:deb安裝和源碼安裝

我選第2個,建議你也選2

創建包含自定義消息的catkin工程

在rosjava workspace的src目錄下創建qbo_arduqbo的catkin工程

haipeng@whp:~/rosjava/src/qbo_arduqbo$ tree
.
├── CMakeLists.txt
├── msg
│   └── BatteryLevel.msg
├── package.xml
└── srv

先在~/rosjava/src目錄下創建文件夾 qbo_arduqbo,該文件夾就是catkin包(當然前提是文件夾下必須有CMakeLists.txt 和package.xml才行)然後依次創建上圖中的 文件 和 子文件夾(msg、srv)。
BatteryLevel.msg 的內容
Header header
uint8  stat
float32  vol1
float32  cur1
float32  cur2
float32  vol2 

注意儘量用ros內置類型(內置類型都是小寫字母)
CMakeLists.txt 和package.xml 的內容照着隔壁的rosjava_test_msgs包改吧改吧就行

將該包添加到meta包rosjava_message裏

將包名添加到rosjava_message包的catkin配置文件(package.xml CMakeLists.txt)相應位置

添加的位置同樣照着隔壁的rosjava_test_msgs包來

執行catkin_make命令

在workspace的根目錄執行catkin_make

haipeng@whp:~/rosjava$ catkin_make

該命令會將qbo_arduqbo包裏的.msg文件編譯成jar包,並放到本地maven倉庫裏,一般位於下面2個之一

/home/haipeng/android_core/devel/share/maven
/home/haipeng/rosjava/devel/share/maven

在自己的工程裏引用上一步生成的maven包

在自己工程的build.gradle文件裏添加對應的依賴

dependencies { 
  compile fileTree(dir: 'libs', include: ['*.jar']) 
  compile "org.ros.rosjava_messages:qbo_arduqbo:[0.2,0.3)"  //這裏這裏
  compile 'org.ros.rosjava_core:rosjava_tutorial_pubsub:[0.2,0.3)' 
  compile project(':android_10') 
}

==========完畢============

注意事項

運行roscore的主機上必須要設置ROS_IP環境變量,因爲android設備跟ROS必然運行在不同的主機上,而跨主機通訊ROS要求hostname必須能被解析,而我們的局域網一般沒有DNS服務器,所以會導致android訂閱失敗!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章