【RM2023-上位机通信库SerialPro开源】
在视觉和电控的甩锅环节中,如何实现上下位机通信及其稳定性一直是一个问题
为此,我们推出SerialPro,一次性解决上位机侧编写通信代码的所有烦恼(剩下的就让电控头疼去吧
基础示例代码如下
SerialPro通过回调的方式对收到的数据进行处理,注册回调函数需要提供对应的cmd_id以及一个函数指针/std::function/lambda函数对象,当收到消息并通过所有校验时就会触发回调函数
该示例中使用了我们队内的通信协议,如果需要自定义也非常简单,只需要继承SerialPro类,提供帧头帧尾类型,设置校验器、编码器以及长度和命令字提取函数即可
我们的队内通信协议实现如下
同时,我们的仓库中也提供了一个裁判系统通信协议的实现(消息类型还没有完全编写完成),但是由于还没有裁判系统实物,该实现还没有进行系统测试,在进一步测试后会添加对应的example
目前SerialPro能实现的功能
github链接:https://github.com/nuaa-rm/serialPro/
如果该项目对开发有帮助,请为我们点亮Star
南航长空御风战队视觉组
为此,我们推出SerialPro,一次性解决上位机侧编写通信代码的所有烦恼(剩下的就让电控头疼去吧
基础示例代码如下
SerialPro通过回调的方式对收到的数据进行处理,注册回调函数需要提供对应的cmd_id以及一个函数指针/std::function/lambda函数对象,当收到消息并通过所有校验时就会触发回调函数
该示例中使用了我们队内的通信协议,如果需要自定义也非常简单,只需要继承SerialPro类,提供帧头帧尾类型,设置校验器、编码器以及长度和命令字提取函数即可
我们的队内通信协议实现如下
同时,我们的仓库中也提供了一个裁判系统通信协议的实现(消息类型还没有完全编写完成),但是由于还没有裁判系统实物,该实现还没有进行系统测试,在进一步测试后会添加对应的example
目前SerialPro能实现的功能
- 变长/定长通信协议解码
- 半自动通信协议编码
- 跨平台串口系统调用支持(通过改动后的seriallib库实现)
- 可脱离串口协议改用其他的通信方式,仅需修改serialPro.h中对seriallib库的调用即可
- 裁判系统串口协议完整支持
- 内部消息队列
- 提供解码器错误处理端口(目前遇到解码错误会直接忽略)
- 目前版本回调函数执行使用串口监听线程,不建议在回调函数中执行耗时较长的工作避免丢失数据,我们即将提供一个内部消息队列并将回调函数移动至单独线程执行以解决这个问题,同时,也应该注意不在一个线程执行导致的内存安全问题,我们正在考虑借鉴ros的方案提供spin和spinOnce以及多线程spinner供用户使用
- 受上述问题影响,未来的版本中API可能会发生变化,请使用时注意版本
github链接:https://github.com/nuaa-rm/serialPro/
如果该项目对开发有帮助,请为我们点亮Star
南航长空御风战队视觉组
请问这篇文章对你有用吗?
【RM2023-上位机通信库SerialPro开源】