rosbridge 淡淡的烟草味﹌ 2023-09-28 14:51 12阅读 0赞 之前有用安卓平台控制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中消息/服务信息,反之也可以。如下图所示: ![在这里插入图片描述][016db0bfffbe44068028fad2aac23d6f.png] 所以任何支持json格式进行数据传输的语言都可以通过rosbridge和ROS通信,而java是其中最广泛使用的的一种。 ### 2.rosbridge的结构 ### 用一张图表示rosbridge的结构就是: ![在这里插入图片描述][d154fbf8eb0e4bbe9916619242030de9.png] 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格式的生成。 ![在这里插入图片描述][52118a27c4c44027bbfc930d27d7f548.png] 图源:实在抱歉,我忘记原作者的引用网址了。侵权删~ rosbridge支持以下三种具体的通信协议,要根据实际情况进行选择: ![在这里插入图片描述][6c5aff24dc8846b486a14919de7de3cd.png] 但rosbridge只实现了tcp/udp/websocket Server端,而且Server端不会主动连接,也就是需要自己实现客户端,将数据变成符合rosbridge提供的协议格式(rosbridgev2.0)的json数据,再通过同样的通信协议方法(websocket)进行连接。 如果选择websocket进行执行,命令如下(address是为了指定IP): roslaunch rosbridge_server rosbridge_websocket.launch address:=192.168.74.57 用户连接成功结果如下: ![在这里插入图片描述][c11d8642ebb84d08a1910c8bd1396aa8.png] 针对于上面那个麻烦的问题,有高手已经做了处理。并将其开源了出来(我叫它现成轮子~):[https://github.com/djilk/ROSBridgeClient][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][https_blog.csdn.net_dzjoke_article_details_116056180] 用rqt\_garph看拓扑结构就是这样的: ![在这里插入图片描述][fb109069a7114c638d549e5cda4ecc18.png] ###### demo2:网页文字交互demo(BS结构): ###### 详见:[https://blog.csdn.net/qq\_41821678/article/details/120976232][https_blog.csdn.net_qq_41821678_article_details_120976232] ###### demo3:github开源项目(CS结构,未真实验证) ###### 详见:[https://github.com/UbiquityRobotics/Robot\_Commander][https_github.com_UbiquityRobotics_Robot_Commander] 详见:[https://github.com/1hada/android\_rosbridge\_teleop][https_github.com_1hada_android_rosbridge_teleop] 详见:[https://github.com/Hongshuai-Wang/RosAppCtrl-rosbridge][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] [rosbridge - 简书 (jianshu.com)][rosbridge - _ _jianshu.com] rosbridge wiki: [http://wiki.ros.org/rosbridge\_suite][http_wiki.ros.org_rosbridge_suite] 协议(目前使用的是rosbridgev2.0版本):[https://github.com/RobotWebTools/rosbridge\_suite/blob/groovy-devel/ROSBRIDGE\_PROTOCOL.md][https_github.com_RobotWebTools_rosbridge_suite_blob_groovy-devel_ROSBRIDGE_PROTOCOL.md] rosbridge——JS应用库(用于网页开发html与ros通信) 教程:[http://wiki.ros.org/roslibjs][http_wiki.ros.org_roslibjs] 源码:[https://github.com/RobotWebTools/roslibjs][https_github.com_RobotWebTools_roslibjs] ros与JS网页交互基础教程:[https://www.bilibili.com/video/av6293256/][https_www.bilibili.com_video_av6293256] rosbridge各组件代码参数详细:[https://blog.csdn.net/wjydym/article/details/95380260][https_blog.csdn.net_wjydym_article_details_95380260] 参考(对成熟安卓开发框架做了一定解释): [https://blog.csdn.net/XCCCCZ/article/details/86773609][https_blog.csdn.net_XCCCCZ_article_details_86773609] [https://blog.csdn.net/XCCCCZ/article/details/89739759][https_blog.csdn.net_XCCCCZ_article_details_89739759] 安卓开发demo: [https://blog.csdn.net/GreatSimulation/article/details/108899572][https_blog.csdn.net_GreatSimulation_article_details_108899572] 源码:[https://github.com/KEYD111/TestRosBridge][https_github.com_KEYD111_TestRosBridge] 安卓结合rosbridge开发Demo(对ROSBridgeClient做了一层封装): [https://www.codercto.com/a/42991.html][https_www.codercto.com_a_42991.html] [016db0bfffbe44068028fad2aac23d6f.png]: https://img-blog.csdnimg.cn/016db0bfffbe44068028fad2aac23d6f.png [d154fbf8eb0e4bbe9916619242030de9.png]: https://img-blog.csdnimg.cn/d154fbf8eb0e4bbe9916619242030de9.png [52118a27c4c44027bbfc930d27d7f548.png]: https://img-blog.csdnimg.cn/52118a27c4c44027bbfc930d27d7f548.png [6c5aff24dc8846b486a14919de7de3cd.png]: https://img-blog.csdnimg.cn/6c5aff24dc8846b486a14919de7de3cd.png [c11d8642ebb84d08a1910c8bd1396aa8.png]: https://img-blog.csdnimg.cn/c11d8642ebb84d08a1910c8bd1396aa8.png [https_github.com_djilk_ROSBridgeClient]: https://github.com/djilk/ROSBridgeClient [https_blog.csdn.net_dzjoke_article_details_116056180]: https://blog.csdn.net/dzjoke/article/details/116056180 [fb109069a7114c638d549e5cda4ecc18.png]: https://img-blog.csdnimg.cn/fb109069a7114c638d549e5cda4ecc18.png [https_blog.csdn.net_qq_41821678_article_details_120976232]: https://blog.csdn.net/qq_41821678/article/details/120976232 [https_github.com_UbiquityRobotics_Robot_Commander]: https://github.com/UbiquityRobotics/Robot_Commander [https_github.com_1hada_android_rosbridge_teleop]: https://github.com/1hada/android_rosbridge_teleop [https_github.com_Hongshuai-Wang_RosAppCtrl-rosbridge]: https://github.com/Hongshuai-Wang/RosAppCtrl-rosbridge [rosbridge]: https://www.guyuehome.com/33752 [rosbridge - _ _jianshu.com]: https://www.jianshu.com/p/6374033447d9/ [http_wiki.ros.org_rosbridge_suite]: http://wiki.ros.org/rosbridge_suite [https_github.com_RobotWebTools_rosbridge_suite_blob_groovy-devel_ROSBRIDGE_PROTOCOL.md]: https://github.com/RobotWebTools/rosbridge_suite/blob/groovy-devel/ROSBRIDGE_PROTOCOL.md [http_wiki.ros.org_roslibjs]: http://wiki.ros.org/roslibjs [https_github.com_RobotWebTools_roslibjs]: https://github.com/RobotWebTools/roslibjs [https_www.bilibili.com_video_av6293256]: https://www.bilibili.com/video/av6293256/ [https_blog.csdn.net_wjydym_article_details_95380260]: https://blog.csdn.net/wjydym/article/details/95380260 [https_blog.csdn.net_XCCCCZ_article_details_86773609]: https://blog.csdn.net/XCCCCZ/article/details/86773609 [https_blog.csdn.net_XCCCCZ_article_details_89739759]: https://blog.csdn.net/XCCCCZ/article/details/89739759 [https_blog.csdn.net_GreatSimulation_article_details_108899572]: https://blog.csdn.net/GreatSimulation/article/details/108899572 [https_github.com_KEYD111_TestRosBridge]: https://github.com/KEYD111/TestRosBridge [https_www.codercto.com_a_42991.html]: https://www.codercto.com/a/42991.html
相关 rosbridge 之前有用安卓平台控制ROS节点的需求,在设计实验方案的时候了解到rosbridge。这一篇就对rosbridge做一个简单的介绍。希望这篇文章解释明白几个问题 1. 淡淡的烟草味﹌/ 2023年09月28日 14:51/ 0 赞/ 13 阅读
相关 Ubuntu20.04安装Rosbridge教程并进行小乌龟测试[详细] > 系统要求:Ubuntu20.04 > > ROS安装版本: Noetic 安装步骤: 1、添加 sources.list sudo sh -c 'echo 骑猪看日落/ 2022年11月16日 05:47/ 0 赞/ 974 阅读
相关 Ubuntu零基础教学-Ubuntu20.04安装Rosbridge并进行小乌龟测试 | 超级干货,建议收藏 > 系统要求:Ubuntu20.04 > > ROS安装版本: Noetic > 一、Rosbridge介绍: > > Robot Operating 不念不忘少年蓝@/ 2022年10月06日 11:43/ 0 赞/ 47 阅读
还没有评论,来说两句吧...