rosbrige为没有ROS的功能模块提供了一个JSON的接口(JSON是一种websocket通讯的数据形式,非常简单除暴而不顾及内存,其实我挺不喜欢)。有很多前端可以与Rosbridge 互动,包括websocket服务器。Rosbridge_suite是一个复合的功能包,包含了rosbridge,各种前端封装包,和一个帮助包。
参考文献:ROS wiki
源码:https://github.com/RobotWebTools/rosbridge_suite.git
1 关于
这里包括两部分:协议和实现
1.1 Rosbridge协议
Rosbridge Protocol就是向ROS发送JSON命令的一个规范,使用这个协议订阅一个主题的例子如下:
{ "op": "subscribe",
"topic": "/cmd_vel",
"type": "geometry_msgs/Twist"
}
这个规范不针对任何编程语言和传输方式,只要支持JSON即可。
1.2 实现
rosbridge_suite是一个集合,提供了一个微博创可贴传输层。
这个包包括:
- rosbridge_library 核心rosbridge包。rosbridge_library负责接受JSON命令并将指令发送给ROS,同样,由ROS发送的指令会由其转换为JSON字符串发出。
- rosapi 使某个ROS可执行程序可以访问为ROS client libraries准备的服务。包括获取和设置参数,得到主题列表等。
- rosbridge_server 当 rosbridge_library提供JSON <-> ROS的转换,它将传输层就提供给了其他程序。Rosbridge_server提供了一个websocket连接,所以浏览器就可以与rosbridge通信了。
2 源码
源码可以直接由github获取:https://github.com/RobotWebTools/rosbridge_suite
3 安装
Rosbridge可以直接debian安装:
sudo apt-get install ros-<rosdistro>-rosbridge-server
4 教程
4.1 初级教程
这个教程的内容是如何启动rosbridge server 并且和它通信。
4.1.1 安装Rosbridge
安装了ROS之后,就可以安装Rosbridge,指令如下:
sudo apt-get install ros-<rosdistro>-rosbridge-suite
4.1.2 运行Rosbridge
安装完ROS和Rosbridge以后,首先需要让系统知道他们的存在,就是配置一下环境变量:
source /opt/ros/kinetic/setup.bash
接下来就可以启动Rosbridge了,启动rosbridge和它的包,比如osbridge_server 和 rosapi,安装的时候安装了一个启动文件,用法如下:
roslaunch rosbridge_server rosbridge_websocket.launch
运行该文件,就会启动rosbridge并且创建了一个websocket,默认监听9090端口。
我们可以通过修改 ~/port 参数监听其他的端口,示例如下:
<launch>
<include file="$(find rosbridge_server)/launch/rosbridge_websocket.launch" >
<arg name="port" value="8080"/>
</include>
</launch>
4.1.3 与Rosbridge通信
可以找一个简单的websocket客户端在线测试网页,连接它测试一下。
4.2 进阶教程
这里要介绍的是如何在rosbridge上开发。
4.2.1 编译Rosbridge
Rosbridge 2.0支持像Catkin一样管理编译。
- 1安装rosbridge依赖rosauth
sudo apt-get install ros-kinetic-rosauth
其实前面已经安装过了
- 2 source一下
source /opt/ros/kinetic/setup.bash
- 3 创建一个工作空间
mkdir ~/ws
- 4 clone rosbridge suite 资源
mkdir ~/ws/src
cd ~/ws/src
git clone https://github.com/RobotWebTools/rosbridge_suite.git
- 5 编译rosbridge
cd ~/ws
catkin_make
- 6 安装
把新编译的rosbridge安装到ROS路径
cd ~/ws
source devel/setup.bash
后面可以参照教程4.1运行了。