原文:xxhong.net/2016/12/01/ros-client/
ROS与Android的窃窃私语
ROS (Robot Operating System, 机器人操作系统) 提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、函数库、可视化工具、消息传递和软件包管理等诸多功能。ROS遵循BSD开源许可协议
Android是一种基于Linux的自由及开放源代码的操作系统,主要使用于移动设备,如智能手机和平板电脑,由Google公司和开放手机联盟领导及开发
ROS严格来说并不算OS,而是一套运行于linux之上,连接机器人软硬件的软件包,而Android是针对于移动端的定制Linux.我们主要来聊聊ROS与Android之间的通信
目前,ROS与Android主要的通信方式有两种:
ROS的java语言实现,借助该类库,能在Android上运行ROS 节点,功能强大,但是编译比较麻烦,最大的问题是ROS对其支持只到indigo版本!
通过Websocket以JSON格式的API为非ROS环境提供ROS通信支持,包括对Topic和Service的各种操作,这种通信方式轻量级,跨平台
接下来我们主要讨论第二种方式的实现过程
了解通信协议rosbridge protocol
ROS端安装对应版本rosbridge-suite
1sudo apt-get install ros--rosbridge-suite
ROS端启动launch,你也可以include到自己的launch文件
1roslaunch rosbridge_server rosbridge_websocket.launch
Android端需要一个websocket的java实现,然后就是按协议解析json,这好像也挺麻烦的嘛,不过好在找到一个开源项目ROSBridgeClient,貌似是一个netbeans project,我是直接把源码Copy到自己项目中来,该库依赖于java_websocket 和 json_simple两个library,这样就可以开始写你自己的逻辑代码了
目前APK已实现功能有:
根据IP和连接到ROS
获取ROS端所有Node list, Topic list, Service list
获取指定Topic或者Service的请求参数,并提供请求接口
针对Topic /cmd_vel 做了一个方向摇杆控制
针对Topic /map做了一个地图的展示
理论上来说,应该能在Android端实现rviz类似的功能,大家可以体验一下我实现的Demo(下载地址点我),最后放几张截图