通过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订阅失败!

你可能感兴趣的:(机器人)