安卓与ROS通信开发——1、安卓与ROS通信的现状
概述概述概述
安卓与ROS通信的现状
ROS官方支持的语言绑定只有C++和Python,目前安卓想与ROS通信,必须借助半官方的rosjava包。
rosjava话题通信机制(Publish/Subscribe)
rosjava和C++/Python一样,是一个全功能、大体量的ROS绑定,即可以在Java(android)平台上创建Master Node,然后其他Node(C++/Python)可以连上这个Master,进行分布式通信。
rosjava的gradle脚本较为复杂,将其集成到自己项目的android工程难度较大。
rosbridge服务通信机制(Client/Server)
rosbridge协议,该协议的基本思想是将节点间的分布式通信,改成client节点与一个代理节点进行C/S通信,然后代理节点再将请求转发给server节点,这样移动端就不需要实现整个ROS平台通信,三只需要跟代理节点通信即可。
注:移动平台无法做server节点,但轻量化。
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTc1ODc5OS8xNTk0Nzk1NTEyNTgwLWY5NjM0NDAwLWVjNzYtNDViZC05Njg2LWVhMDg0YmQzOTIxZS5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=610&margin=[object Object]&name=image.png&originHeight=610&originWidth=1152&size=294237&status=done&style=none&width=1152)
相关ROS包的跨平台特性
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTc1ODc5OS8xNTk0Nzk1NTU3NDExLWNlNWM3MzQ5LTA3M2QtNDE0MC05MWNmLTM4MzQ2OTdlMzY0Ni5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=788&margin=[object Object]&name=image.png&originHeight=788&originWidth=1196&size=106399&status=done&style=none&width=1196)
rosjava/rosbridge 均能满足x86架构设备(工控机/ROS系统)与ARM-A架构设备(安卓设备)通讯。
![image.png](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9jZG4ubmxhcmsuY29tL3l1cXVlLzAvMjAyMC9wbmcvMTc1ODc5OS8xNTk0Nzk2MjA4NDIzLWY3YjRjN2UxLWVlNTYtNDEyMC1iMjQzLWM0Njg5OGY3YzMzNS5wbmc?x-oss-process=image/format,png#align=left&display=inline&height=359&margin=[object Object]&name=image.png&originHeight=359&originWidth=1163&size=434378&status=done&style=none&width=1163)
ROSBridge:在安卓系统使用指定数据内容的基于JSON(或BSON)格式的网络请求(ROSBridge支持TCP、UDP、WebSocket三种网络通讯方式)来调用ROS的功能。
rosjava ros包安装:
http://wiki.ros.org/rosjava/Tutorials/kinetic/Source%20Installation
(官方仅提供kinetic版本安装,暂不支持melodic版本ROS)