android ros 节点编写_[ros-android-02] Android端编写简单的publisher和subscriber

实验室买了一个LOOMO代步车,搭载的是Android系统,为了能够将ROS下的代码接入该平台来测试,所以最近开始了ROS和Android通信这块的内容(别问我为什么不直接买一个可以直接使用ROS的小车?我也想啊,可是老板说这个便宜).

切入正题,我将上层的处理算法运行在一台搭载ROS的PC上,主要使用LOOMO的底盘包括里程计,我打算将PC处理得出的速度指令发送给LOOMO来执行,同时LOOMO本身将自己的状态发布到ROS系统中,包括里程计信息和TF信息等.这就相当于构建一个Base节点运行在LOOMO上,该节点订阅cmd_vel话题,发布odom话题,以及发布相关的tf信息等.

为了实现在Android系统上构建一个ROS节点,我使用了rosjava库,以及基于该库封装好的ros android相关组件等.

  1. 开发环境配置

ubuntu18.04 + ROS kinetic + Android Studio

以上环境的下载配置这里就不详述了,下面说一下,rosjava库的安装,由于自己什么都不太懂,所以起初弄了很久,看了官网的install tutorial,每次尝试,每次失败,以至于差点放弃,后来才发现安装那么简单.其实android ros库的安装不需要考虑是否安装ROS,所以直接将github官网的android-apps[1]下载下来,通过android studio打开编译就行.需要注意的是这个过程要保证电脑有很好的网络链接,因为android studio需要在线下载一些第三方依赖,我一开始连着校园网,一到中间就失败了,后来换了实验室的网,就一下成功了.

2. 编写简单的publisher[2]

首先android activity 需要继承类RosActivity,android-apps中的tutorial继承了类RosAppActivity,这是一个进一步封装RosActivity的类,选择继承哪个都可以,这里我选择继承了RosAppActivity类.

首先需要写一个Node,自己编写的Node需要继承AbstractNodeMain, 重写getDefaultNodeName()和onStart(ConnectedNode connectedNode)方法.getDefaultNodeName()用来设置节点的名称,我们关于节点内的操作都写在onStart方法中,包括定义订阅器和发布器等.

final 

上面这段代码就是实例化了一个Publisher类.

后面的代码也比较简单,参考官网的pubsub demo即可。

3. 编写简单的Subscriber[3]

Subscriber

上面的代码就是实例化了一个Subscriber类。

subscriber

上面的代码片段添加了接收到新消息时的回调函数,就是roscpp中callback。

总的来看,rosjava中publiser和subscriber的编写逻辑也比较简单。

4. 测试

我再android端编写了一个测试publisher和一个测试subscriber,将程序运行到手机上,刚进入程序时,默认启动了MasterChooser activity, 用于设置ROS Master URI, 将手机和pc连接再同一个网络下,在pc端启动roscore, 将界面中的Master URI设置为http://ip:11311,其中的ip替换为此时电脑的IP地址。点击连接成功后,会跳转到MainActivity, 在pc端查看rosgraph图,一切连接正常,查看android ros node 发布的话题,也有消息输出,但是当通过pc端使用rostopic pub 指令向android ros node 订阅的话题发布消息时,调试来看,android 端接收不到这个消息,问题在于没有在pc端设置ROS_IP环境变量

即需要在pc端每一个运行node的terminal中事先要设置ROS_IP环境变量为pc的IP地址

export ROS_IP=[your pc ip]

最终,测试成功,android 端可以成功接收到pc端发来的Message

参考

  1. ^android-apps https://github.com/rosjava/android_apps
  2. ^https://github.com/rosjava/rosjava_core/blob/kinetic/rosjava_tutorial_pubsub/src/main/java/org/ros/rosjava_tutorial_pubsub/Talker.java
  3. ^https://github.com/rosjava/rosjava_core/blob/kinetic/rosjava_tutorial_pubsub/src/main/java/org/ros/rosjava_tutorial_pubsub/Listener.java
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值