rosserial是用于非ROS设备与ROS设备进行通信的一种协议。它为非ROS设备的应用程序提供了ROS节点和服务的发布/订阅功能,使在非ROS环境中运行的应用能够通过串口或网络能够轻松地与ROS应用进行数据交互。
rosserial分为客户端和服务器两部分。rosserial客户端运行在运行在没有安装ROS的环境的应用中,通过串口或网络与运行在ROS环境中的rosserial服务器连接,并通过服务器节点在ROS中发布/订阅话题。
1 rosserial服务器
rosserial服务器是运行在ROS设备中的一个节点,作为串行协议和ROS网络的连接。rosserial服务器有C++和Python两种语言的实现。
1.1 rosserial_python
rosserial_python是一个基于python的rosserial协议实现。它包含主机端rosserial连接的Python实现,能够自动处理连接的支持rosserial的设备的设置、发布和订阅(注意:需要安装pyserial才能使用)。
rosserial_python功能包的serial_node.py节点,与启用了rosserial的设备通过串口通信。该节点根据存储在设备中的配置信息自动启动订阅者和发布者。要使节点以指定的波特率与指定的串口设备连接,例如在/dev/ttyACM1,则必须在命令行上指定参数:
rosrun rosserial_python serial_node.py _port:=/dev/ttyACM1 _baud:=115200
也可以通过launch文件指定以下参数:
<launch>
<node pkg="rosserial_python" type="serial_node.py" name="serial_node">
<param name="port" value="/dev/ttyACM1"/>
<param name="baud" value="115200"/>
</node>
</launch>
1.2 rosserial_server
rosserial_server功能包包含主机端rosserial连接的C ++实现。它会自动处理已连接的启用rosserial的设备的设置,发布和订阅。
这些节点使用topic_tools/ShapeShifter元消息来重新发布来自客户机的消息,而不必在编译时了解它们。这种方法的惟一警告是服务器没有消息的完整文本定义(因为它不是存储在客户端或部分rosserial协议中)。它使用rosserial_python功能包中的message_info_service.py节点提供的辅助服务,该服务允许C ++驱动程序查找消息定义和散列字符串,而这些消息定义和散列字符串在编译时是未知的,从而使其可以完全发布来自微控制器的话题。
rosserial_server提供serial_node和socket_node两个节点,分别用于串口连接和网络套接字连接。建议的用法是在消息信息节点侧启动主服务器节点。提供了启动文件以启动串行链接。服务器节点的启动方法如下: