通过rosjava实现android订阅ROS自定义消息
2016-08-19 10:51
1156 查看
android要与ROS通讯,首先要有rosjava库,这玩意儿类似于ROS官方支持的rospy roscpp等,也是ROS分布式计算平台的一种language binding
可惜rosjava出现的太晚,不够成熟,文档也很不详细,社区活跃度也不高,很多问题都是没有任何搜索引擎能帮上忙的
我们的机器人配备了一块android平板,要显示底盘的电量信息,这就要订阅底盘上ROS通过/battery_state这个topic发布的电池电量message,但该message的消息类型并不是标准的std_msgs.String之类,而是qbo_arduqbo.BatteryLevel这个自定义类型,怎么办呢?看下面
我选第2个,建议你也选2
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 的内容
注意尽量用ros内置类型(内置类型都是小写字母)
CMakeLists.txt 和package.xml 的内容照着隔壁的rosjava_test_msgs包改吧改吧就行
添加的位置同样照着隔壁的rosjava_test_msgs包来
haipeng@whp:~/rosjava$ catkin_make
该命令会将qbo_arduqbo包里的.msg文件编译成jar包,并放到本地maven仓库里,一般位于下面2个之一
/home/haipeng/android_core/devel/share/maven
/home/haipeng/rosjava/devel/share/maven
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')
}
==========完毕============
可惜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_makehaipeng@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订阅失败!相关文章推荐
- 系出名门Android(10) - HTTP 通信, XML 解析, 通过 Hander 实现异步消息处理
- 一个流行且实用的JS表单验证提示,演示了怎么自定义错误信息的显示方式,同时通过写FormValid.showError类方法来实现错误显示方式自定义: errMsg 是一个错误消息的数组,这样方便自定
- iOS 设备通过 java-apns 组件实现苹果 APNs 消息推送实现
- android通过服务实现消息推送
- 我的Android进阶之旅------>Android如何通过自定义SeekBar来实现视频播放进度条
- android HTTP 通信, XML 解析, 通过 Hander 实现异步消息处理 (1)
- JAVA实现微信公众账号自定义消息回复
- android中通过自定义xml实现你需要的shape效果 xml属性配置
- Android 通过消息栏实现应用程序前后台切换效果Notification
- Android使用webview控件加载本地html,通过Js与后台Java实现数据的传递
- android HTTP 通信, XML 解析, 通过 Hander 实现异步消息处理(2)
- 在Android中,通过JNI实现C++与Java相互调用
- android HTTP 通信, XML 解析, 通过 Hander 实现异步消息处理
- android通过服务实现消息推送
- 系出名门Android(10) - HTTP 通信, XML 解析, 通过 Hander 实现异步消息处理
- 为 Android 添加 Java 层服务也就是添加自定义的aidl服务到serviceManager 通过ServiceManager.getService取
- android之通过java代码实现PreferenceActivity
- 通过消息实现自定义输入框(InputBox)
- android 通过回调实现 完全自定义Dialog 简单易用
- android通过服务实现消息推送