ROS与Android的窃窃私语

# 简介

ROS (Robot Operating System, 机器人操作系统) 提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、函数库、可视化工具、消息传递和软件包管理等诸多功能。ROS遵循BSD开源许可协议

Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发

ROS严格来说并不算OS,而是一套运行于linux之上,连接机器人软硬件的软件包,而Android是针对于移动端的定制Linux.我们主要来聊聊ROS与Android之间的通信

# 通信方式

目前,ROS与Android主要的通信方式有两种:

  1. rosjava&android_ndk

    ROS的java语言实现,借助该类库,能在Android上运行ROS 节点,功能强大,但是编译比较麻烦,最大的问题是ROS对其支持只到indigo版本!

  2. rosbridge

    通过Websocket以JSON格式的API为非ROS环境提供ROS通信支持,包括对Topic和Service的各种操作,这种通信方式轻量级,跨平台

接下来我们主要讨论第二种方式的实现过程

# 具体实现

  1. 了解通信协议 rosbridge protocol
  2. ROS端安装对应版本rosbridge-suite

    1
    sudo apt-get install ros-<rosdistro>-rosbridge-suite
  3. ROS端启动launch,你也可以include到自己的launch文件

    1
    roslaunch rosbridge_server rosbridge_websocket.launch
  4. Android端需要一个websocket的java实现,然后就是按协议解析json,这好像也挺麻烦的嘛,不过好在找到一个开源项目ROSBridgeClient,貌似是一个netbeans project,我是直接把源码Copy到自己项目中来,该库依赖于java_websocket 和 json_simple两个library,这样就可以开始写你自己的逻辑代码了

# APK Demo

目前APK已实现功能有:

  1. 根据IP和连接到ROS
  2. 获取ROS端所有Node list, Topic list, Service list
  3. 获取指定Topic或者Service的请求参数,并提供请求接口
  4. 针对Topic /cmd_vel 做了一个方向摇杆控制
  5. 针对Topic /map做了一个地图的展示

理论上来说,应该能在Android端实现rviz类似的功能,大家可以体验一下我实现的Demo (下载地址点我) ,最后放几张截图



转载请注明出处:http://xxhong.net/2016/12/01/ros-client