rosserial通信协议简介
来源:互联网 发布:welsh算法 编辑:程序博客网 时间:2024/05/18 11:25
1 概述
rosserial是一种ROS串行通信协议,通过串行传输介质实现ROS的P2P通信。这种协议通过简单的添加包头和包尾可以实现了多主题或者服务共享串行通信介质(如串口,网络socket)。
2 协议包格式
1st Byte - Sync Flag (Value: 0xff) 2nd Byte - Sync Flag / Protocol version 3rd Byte - Message Length (N) - Low Byte 4th Byte - Message Length (N) - High Byte 5th Byte - Checksum over message length 6th Byte - Topic ID - Low Byte 7th Byte - Topic ID - High Byte N Bytes - Serialized Message Data Byte N+8 - Checksum over Topic ID and Message Data
不同ROS发行版对应不同协议版本字段定义(0xff:ROS Groovy, 0xfe on ROS Hydro, Indigo, and Jade.)。
Topics ID 0-100为系统功能专用主题使用, 这些主题类似于消息 rosserial_msgs/TopicInfo 中定义的那些特定主题。
长度和data的checksum字段用于确保包的完整性,data的checksum可以按照如下公式计算:
255 - ( (Topic ID Low Byte + Topic ID High Byte + data byte values) % 256)
3 主题协商
在数据传输之前,PC/平板一侧必须先向Arduino或者其它嵌入式设备发送主题查询请求,确定将要发送或者订阅的主题的名字和消息类型。
主题协商由主题查询请求,响应和主题定义组成。主题查询请求使用的topic ID为0。
主题查询请求类似于如下所示:
0xff 0xfe 0x00 0x00 0xff 0x00 0x00 0xff
主题查询响应包 (消息类型为rosserial_msgs/TopicInfo) 包含了特定主题信息,使用如下的数据信息:
uint16 topic_id string topic_name string message_type string md5sum int32 buffer_size
上面的topic_name是主题名称,如 "cmd_vel", message_type是消息类型,如"geometry_msgs/Twist"。
注意:如果响应包未收到,查询会重发。
4 同步
相互之间的时间同步通过发送消息 std_msgs::Time实现。 嵌入式设备可以向PC/平板发送空的时间消息获取当前时间,响应返回的时间可以用于时间同步(检查时钟偏差)。
5 rosserial相关包
5.1 客户端库
通过这些库用户可以方便的让ROS节点在各种系统上启动和运行。下面这些库是通用ANSI C++ rosserial_client 库的具体化,目前包括如下:
rosserial_arduino
Arduino, especially UNO and Leonardo
rosserial_embeddedlinux
support for Embedded Linux (eg, routers)
rosserial_windows
support for communicating with Windows applications
rosserial_mbed
support for mbed platforms
rosserial_tivac
support for TI's Launchpad boards, TM4C123GXL and TM4C1294XL
5.2 ROS厕接口
运行rosserial的众多设备需要通过在主机上运行的节点来把它们桥接起来,接入更广的ROS网络拓扑。
rosserial_python
A Python-based implementation (recommended for PC usage).
rosserial_server
A C++ implementation based on the ShapeShifter message, some limitations compared to rosserial_python but recommended for high-performance applications.
rosserial_java
A Java-based implementation. This implementation is only recommended when you need a Java OSGI based rosserial module or when you want to use rosserial with theAndroid ADK.
- rosserial通信协议简介
- 通信协议简介
- I2C通信协议简介
- Marlink通信协议简介
- 集群间通信协议——TIPC简介
- 国家运输ITS通信协议(NTCIP)简介
- 通信协议
- 通信协议
- 通信协议
- 通信协议
- 通信协议
- 通信协议
- 通信协议
- rosserial for hydro
- 使用rosserial创建一个publisher
- 用rosserial创建一个subscriber
- rosserial客户端库之rosserial_windows
- 网络编程之即时通信程序(聊天室)------(一)通信流程简介及通信协议定制
- java 当中变量存储位置的区别
- 【static】---- 关键字在内存--图解
- 安卓开发——activity的一些初始化的工作,在oncreate中做还是onresume中做
- Kali Linux 秘籍 第五章 漏洞评估
- iOS单例模式
- rosserial通信协议简介
- 2016中国大学生程序设计竞赛(长春)1002 Fraction 数学
- Kali Linux 秘籍 第三章 高级测试环境
- Struts2【二】
- jQuery学习:$( )方法构建原理篇
- HDU 5135 Little Zu Chongzhi's Triangles(2014亚洲区广州站现场赛)
- Kali Linux 秘籍 第九章 无线攻击
- 一个菜鸟java码农的成长之路(3):ListIterator的使用及注意的问题
- matlab实现将彩色图像(R,G,B)色分量的直方图匹配,并计算其相关性