通过Rosbridge与Android通信---安卓接口说明

本文详细介绍了如何使用Rosbridge在Android应用中与ROS进行通信,包括连接ROS、发送和接收数据。通过Eventbus库实现不同组件间的消息传递,以及Butterknife简化视图绑定。示例代码展示了如何订阅、发布话题和调用服务。
摘要由CSDN通过智能技术生成

摘要

项目核心文件

manifests,res是安卓常规文件夹
com.jilk.ros包含核心客户端代码实现
net.xxhong.rosclient 对客户端进行封装,且实现了所有节点,话题,服务的显示

在这里插入图片描述

项目依赖文件

我在拿到代码之后,花好一阵子才稍微熟悉项目中的一些依赖。
在这里插入图片描述

  1. butterknife 通过注解绑定视图,简化操作
  2. Eventbus 可以用于Android四大组件间通讯,也可以用于异步线程和主线程间通讯等
  3. bmelnychuk-TreeView树形可视化结构
//gradle 
dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.github.bmelnychuk:atv:1.2.+'
}
接口使用
  1. 连接ROS
    MainActivity.java
    函数private void connect(String ip, String port)
    参数:传入字符串类型ip,port
    说明:此函数创建ROSBridgeClient类客户端实例。将已连接的客户端类存储于RCApplication,便于进行Activity间的数据传递

  2. 发送给服务端
    Rosbridge协议通信支持json字符串格式
    获取已经连接的ROSBridgeClient类客户端实例。

//获取已经连接的Rosbridgeclient类的实例
client = ((RCApplication)getApplication()).getRosClient();

调用其成员方法send(String json)

//发送数据给服务端
  client.send("{\"op\":\"unsubscribe\",\"topic\":\"" + "/map" + "\"}");
  client.send("{\"op\":\"subscribe\",\"topic\":\"" + "/cmd_vel" + "\"}");
  client.send("{\"op\":\"publish\",\"topic\":\"" + TopicName + "\",\"msg\":{"+data+"}}");
  client.send("{\"op\":\"call_service\",\"service\":\"" + ServiceName + "\",\"args\":["+data+"]}");
  1. 从服务端接收
    使用Eventbus 定义的类进行数据传递。
    这里开源作者已经定义PublishEvent类。
    首先在要接受消息的页面注册
    EventBus.getDefault().register(this);
    开源作者已经写好从ROS服务端接收的代码并且
    ROSBridgeWebSocketClient.javaonMessage()方法中
    通过EventBus发布
    现在获得ROS服务端的数据只需要从EventBus接收消息即可:
    这些消息被封装在PublishEvent类中,通过onEvent方法接收
    public void onEvent(PublishEvent event) {/* Do something */};

基本代码实现
在连接步骤已经完成基础上

//UserActivity部分代码

//Butterknife绑定组件
@Bind(R.id.show_linsp)
TextView showLinsp;

ROSBridgeClient client;
protected void onCreate(Bundle savedInstanceState){
  super.onCreate(savedInstanceState);
  //背景布局设置
  setContentView(R.layout.activity_user);
  //启动ButterKnife插件
  ButterKnife.bind(this);
  //注册订阅者
  EventBus.getDefault().register(this);
  //获取已经连接的Rosbridgeclient类的实例
  client = ((RCApplication)getApplication()).getRosClient();
  //发送数据给服务端
  client.send("{\"op\":\"subscribe\",\"topic\":\"" + "/cmd_vel" + "\"}");
}

public void onEvent(final PublishEvent event) {
        if("/cmd_vel".equals(event.name)){
        	//在消息框显示原始信息
            showLinsp.setText(event.msg);
            return;
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值