ODrive 通讯协议「建议收藏」

ODrive通讯协议与ODrive进行通讯需要对通讯端点进行一系列操作。理论上,端点上的数据可以是以任何方式序列化的任何类型的数据。数据包采用默认的序列化方式,对于您自定义的数据包,您必须自己去进行反序列化。未来我们可能会提供序列化功能。可以通过从端点0读取JSON来枚举可用的端点,从理论上讲,每个接口都可以不同(实际上并没有这么做)。每个端点都可以被用来发送和接收字节数据,有效字节数据的含义在…

大家好,又见面了,我是你们的朋友全栈君。

ODrive通讯协议

与ODrive进行通讯需要对通讯端点进行一系列操作。理论上,端点上的数据可以是以任何方式序列化的任何类型的数据。数据包采用默认的序列化方式,对于您自定义的数据包,您必须自己去进行反序列化。未来我们可能会提供序列化功能。可以通过从端点0读取JSON来枚举可用的端点,从理论上讲,每个接口都可以不同(实际上并没有这么做)。每个端点都可以被用来发送和接收字节数据,有效字节数据的含义在JSON中进行了定义。
例如,int32端点的输入和输出是4字节的小字节序表示。 通常,组合的读/写请求的约定是交换,即返回的值是旧值。 自定义的端点可能不符合这种要求。
该协议有基于数据包的版本和基于流的变体。 适当地使用每个变体。 例如,USB默认运行基于数据包,而UART运行基于字节流。

基于数据包的格式

我们将ODrive称为“服务器”,将PC称为“客户端”。 请求是从PC到ODrive的消息,响应是从ODrive到PC的消息。
每个请求-响应事务对应于一个端点操作。
请求

  • Bytes 0, 1 数据包的序列号, MSB = 0
    • 当前,服务器不进行处理,也不过滤重复发送的数据包。
  • Bytes 2, 3 端点ID
    • 可以从JSON定义中获取所有端点的ID。 可以通过从端点0读取获得JSON定义。
      如果(且仅当)MSB设置为1时客户端期望对此请求做出响应。
  • Bytes 4, 5 预期请求返回的字节数
    • 应该返回给客户端的字节数。 如果客户端不需要任何响应数据,则可以将该值设置为0。
  • Bytes 6 to N-3 有效负载
    • 有效负载的长度由数据包大小确定。 有效负载的格式取决于端点类型。 端点类型可以从JSON定义中获取。
  • Bytes N-2, N-1
    • 对于端点0:协议版本(当前为1)。 服务器应忽略具有其他值的数据包。
    • 对于所有其他端点:通过JSON定义计算得出的CRC16。 CRC16初始值是协议版本(当前为1)。 服务器将忽略CRC错误的数据包。 有关CRC的详细信息,请参见protocol.hpp源码。

响应

  • Bytes 0, 1 数据包的序列号, MSB = 1
    • 这是响应请求的序列号。
  • Bytes 2, 3 有效负载
    • 有效负载的长度,等于请求中指示的预期字节数。 服务器返回的字节数不能超过客户端请求的字节数大小。

基于流的格式

基于流的格式只是基于数据包格式的封装。

  • Byte 0 同步字节0xAA
  • Byte 1 包字节大小
    • 目前,只能发送/接受0到127个字节的包大小。
  • Byte 2 bytes 0 和 bytes 1的CRC8
    • 详情请参考 protocol.hpp 源码
  • Bytes 3 to N-3 包数据
  • Bytes N-2, N-1 CRC16
    • 详情请参考 protocol.hpp 源码

如果您有任何问题或疑问,欢迎您加入ODrive社区或QQ群 851421965 进行交流。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/126675.html原文链接:https://javaforall.net

(0)
上一篇 2022年4月17日 下午4:20
下一篇 2022年4月17日 下午4:40


相关推荐

  • mysql handlersocket_HandlerSocket介绍[通俗易懂]

    mysql handlersocket_HandlerSocket介绍[通俗易懂]HandlerSocket的原理HandlerSocket的应用场景:MySQL自身的局限性,很多站点都采用了MySQL+Memcached的经典架构,甚至一些网站放弃MySQL而采用NoSQL产品,比如Redis/MongoDB等。不可否认,在做一些简单查询(尤其是PK查询)的时候,很多NoSQL产品比MySQL要快很多,而且前台网站上的80%以上查询都是简洁的查询业务。MySQL通过Handl…

    2022年8月24日
    7
  • 11条javascript知识

    1.局部变量和全局变量var操作符定义的变量将成为定义该变量作用域中的局部变量。这个局部变量会在函数退出后销毁。不同于其他语言,javaScript不存在块级作用域。全局变量就是window对象的属性

    2021年12月20日
    52
  • HDU 6034 Balala Power!【排序/进制思维】

    HDU 6034 Balala Power!【排序/进制思维】

    2022年3月8日
    45
  • Vim撤销与修改替换

    Vim撤销与修改替换快速撤销配合数字 多步撤销 u 撤销 先按数字多步撤销 undoU 撤销刚刚对当前行的操作 ctrl shift r 反撤销 redo 快速修改 r replace 替换字符 先按数字可将多个字符全部替换为某个字符 R 进入替换模式 连续替换字符

    2026年3月16日
    1
  • Pycharm打包项目为exe文件

    Pycharm打包项目为exe文件3 输入命令 pyinstallerc py pipinstallpy 按回车键运行 2 输入命令 pyinstaller 按回车键显示安装成功 在项目根目录下有一个 dist 文件夹 里面会有打包好的 exe 文件 4 exe 文件的路径

    2026年1月14日
    1
  • Lens Distortion Correction[通俗易懂]

    LensDistortionCorrectionbyShehrzadQureshiSeniorEngineer,BDTIMay14,2011AtypicalprocessingpipelineforcomputervisionisgiveninFigure1below:Thefocusofthisart

    2022年4月7日
    51

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号