赞
踩
当你在Ros中开发完成,想要导入系统验证功能的时候,是不是苦于需要去Ros,但是去了Ros又没法使用很多很好用的工具,如rviz、rosbag等。调试起来费心费力,如果在非ros平台开发一套可视化、记录工具等又是庞大工程。顿时累觉不爱。
如果你也有同样的烦恼,那快来点赞收藏关注博主,下面的工具绝对适合你,提高你的开发效率,Ros官方已经想到这个问题并且帮大家提供了解决方案:RosBridge
在RosWiki中介绍了RosBridge的功能:
Rosbridge provides a JSON API to ROS functionality for non-ROS
programs. There are a variety of front ends that interface with
rosbridge, including a WebSocket server for web browsers to interact
with. Rosbridge_suite is a meta-package containing rosbridge, various
front end packages for rosbridge like a WebSocket package, and helper
packages.
简而言之就是,RosBridge提供了在Ros与非Ros平台的Json接口,通过多种方式可以实现在不同平台的数据沟通功能。
看来官方很贴心, 下面就来看看这个功能包提供的工具。有三部分:rosbridge_library(将Json转换为Ros的功能)、rosapi(Ros的功能入口)、rosbridge_server (实现了多种服务器模式)。因此RosBridge的解决方案就是这样:
RosBrideg实现了左侧红色的部分,接收JSON指令并发送至ROS环境中,这么看来很清晰对不对?下面看看使用方法
代码项目地址:https://github.com/RobotWebTools/rosbridge_suite
提供了源码,不过最好不要想着从源码编译安装,博主被层出不穷的依赖问题逼得没脾气,最后弄到系统还原。
使用命令安装方式:
$ sudo apt-get install ros-[des_name]-rosbridge-*
解决问题简单快捷。
同时可以下好源码,毕竟可以帮助理解功能包。
RosBridge的Server的DemoServer保存在rosbridge_server/launch文件夹中,可以看到提供了三种实现方式:
TcpUdp适合单向的链接,在机器人系统中,传感器数据和运算结果、控制命令等需要频繁的双向链接,所以选用websocket模式。
$ roslaunch ./rosbridge_websocket.launch
看到这里就启动成功了。默认的配置是监听localhost:9090端口。
如果该端口收到合适指令的JSON数据,RosBridge就会同步发送同样指令给Ros系统,从而实现ros与非ros的数据互通。
{ "op": "subscribe",
"topic": "/cmd_vel",
"type": "geometry_msgs/Twist"
}
这就是一个简单的订阅指令Json格式,订阅的topic名称是cmd_vel,数据类型是geometry_msgs/Twist。当RosBridge收到上述指令时,就会执行相应功能,当收到符合的Topic数据,就会发送给相应的非ros环境,看起来就像是我们的系统也订阅了该话题一样。
具体的更多指令格式可以参考:https://github.com/RobotWebTools/rosbridge_suite/blob/groovy-devel/ROSBRIDGE_PROTOCOL.md
这一篇仅实现了通信过程的一半,另一半在非ros环境中的实现需要我们自己根据自己的环境来实现。下一篇:【Package】RosBridge——打通Ros与非Ros环境的数据壁垒 #2 C++端实现功能ppianpak / rosbridgecpp,我会介绍一个在Unix/C++环境中的高效实现工具,真正建立起跨系统环境的通信结构,需要就点赞关注收藏我吧。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。