irpas技术客

rosbridge_DWQY_rosbridge

未知 6725

??之前有用安卓平台控制ROS节点的需求,在设计实验方案的时候了解到rosbridge。这一篇就对rosbridge做一个简单的介绍。希望这篇文章解释明白几个问题 ??1. rosbridge是什么? ??2. rosbridge的结构 ??3. rosbridge的小demo

1.rosbridge是什么

??rosbridge是官方提供一款工具包,用于ROS系统和非ROS系统通信(只用于通信)。纯ROS系统可以做master节点,ros官方支持语言是C++,python。虽然rosjava可以让java也变成纯ros系统,但rosjava体量较大,一般用于PC。安卓平台资源不足,无法支持涵盖master节点的分布式结构,于是改用轻量级的C/S模式。所以安卓平台不是直接和ROS系统做通信,其中经过一次代理。安卓手机作为客户端,经过代理发给服务端。不过rosbridge为开发者屏蔽了代理转发过程。rosbridge本身有两种结构,适用于两种场景。BS结构适用于浏览器和ROS系统交互,CS结构适用于安卓平台和ROS系统交互。 ??rosbridge既然是提供通信功能的,整体内容都围绕通信展开。rosbridge支持非ros和ros通信的原理是通过把json格式的数据转换成ros中消息/服务信息,反之也可以。如下图所示: ??所以任何支持json格式进行数据传输的语言都可以通过rosbridge和ROS通信,而java是其中最广泛使用的的一种。

2.rosbridge的结构

??用一张图表示rosbridge的结构就是: ??rosbridge的内容结构包括:rosbridge protocol(协议),rosbridge implementation(实现)。协议做的事是规定通信格式,也就是ros中具体操作(话题发布,订阅)到底使用什么样的json格式。通信方式包括话题订阅,消息发布,服务调用,参数设置获取。Implementation部分具体实现功能。 ??实现包括三部分: ??rosbridge_library:最核心的部分,负责获取json字符串并将命令发送到ros,实现获取json格式数据发送到ros中并解析成ros话题, ??rosbridge_server:提供传输功能,支持websocket连接(实现浏览器和rosbridge交谈,浏览器的实现通过roslibjs), ??rosapi:提供ros服务,通过服务调用对ros中一些操作做封装,操作包括获取和设置参数,获取主题列表 ??我觉得下面整这个图很好的解释了rosbridge的工作原理,图的左半部分是rosbridge的工作,右半部分就是json格式的生成。 ??图源:实在抱歉,我忘记原作者的引用网址了。侵权删~

??rosbridge支持以下三种具体的通信协议,要根据实际情况进行选择:

??但rosbridge只实现了tcp/udp/websocket Server端,而且Server端不会主动连接,也就是需要自己实现客户端,将数据变成符合rosbridge提供的协议格式(rosbridgev2.0)的json数据,再通过同样的通信协议方法(websocket)进行连接。

??针对于上面那个麻烦的问题,有高手已经做了处理。并将其开源了出来(我叫它现成轮子~):https://github.com/djilk/ROSBridgeClient ??这个轮子其实做了两件事情: ??1.还是用ros的话题方式操作数据,把数据自动的转成符合要求的??json格式 2.将该json格式,利用符合协议要求的方式通过websocket发送到服务器端

??对于这个轮子的使用提一下,主要是参照/ROSBridgeClient/src/com/jilk/ros/example.java,将这个项目集成到自己的安卓项目中(具体内容请学习安卓开发),/ROSBridgeClient/src/com/jilk/ros/message/,这个目录是话题传递的消息类型,不一定有自己预期的,可以对其进行增加然后使用。(对于更详细的使用,因为都没有官方的教程,只能慢慢摸索啦)

3.rosbridge的小demo ??demo1:网页控制小海龟移动(BS结构):

??详见:https://blog.csdn.net/dzjoke/article/details/116056180 ??用rqt_garph看拓扑结构就是这样的:

demo2:网页文字交互demo(BS结构):

??详见:https://blog.csdn.net/qq_41821678/article/details/120976232

demo3:github开源项目(CS结构,未真实验证)

??详见:https://github.com/UbiquityRobotics/Robot_Commander ??详见:https://github.com/1hada/android_rosbridge_teleop ??详见:https://github.com/Hongshuai-Wang/RosAppCtrl-rosbridge

4. rosbridge安装命令:

??sudo apt-get install ros-版本-rosbridge-suite ??举例:sudo apt-get install ros-melodic-rosbridge-suite


最后再留一些相关的资料或者有收获的博客,感兴趣的可以看看哈~

古月居介绍rosbridge rosbridge - 简书 (jianshu.com) rosbridge wiki: http://wiki.ros.org/rosbridge_suite 协议(目前使用的是rosbridgev2.0版本):https://github.com/RobotWebTools/rosbridge_suite/blob/groovy-devel/ROSBRIDGE_PROTOCOL.md rosbridge——JS应用库(用于网页开发html与ros通信) 教程:http://wiki.ros.org/roslibjs 源码:https://github.com/RobotWebTools/roslibjs ros与JS网页交互基础教程:https://·/video/av6293256/ rosbridge各组件代码参数详细:https://blog.csdn.net/wjydym/article/details/95380260

参考(对成熟安卓开发框架做了一定解释): https://blog.csdn.net/XCCCCZ/article/details/86773609 https://blog.csdn.net/XCCCCZ/article/details/89739759

安卓开发demo: https://blog.csdn.net/GreatSimulation/article/details/108899572 源码:https://github.com/KEYD111/TestRosBridge

安卓结合rosbridge开发Demo(对ROSBridgeClient做了一层封装): https://·/a/42991.html


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #rosbridge #希望这篇文章解释明白几个问题1 #rosbridge是什么2 #rosbridge的结构3