在淘宝买了个三轴云台,基于STorM32 BGC的,用调试软件控制没有问题,但是自动飞行时候也得通过程序自动控制,所以研究下官网协议,并对其进行了翻译说明。

参考链接Serial Communication

Storm32板可通过串口USB、UART和蓝牙进行通信。三组命令可用于串口通信:

  • 简单指令:这个集合有一个非常简单的命令结构,用于GUI的主要任务。
  • RC指令:这套设备的目标是远程控制Storm32万向节。
  • mavlink指令:这个集合是“real”mavlink。

简单指令和RC指令有许多相似之处,都是由固件中相同代码处理的。它们往往比mavlink命令更有效。任何一组命令都可以通过任何串口(USB、UART和蓝牙)进行处理。然而,当mavlink心跳被激活时,UART只接受mavlink命令,并且蓝牙可能不再使用(USB仍然接受所有命令)。

这三个命令集的每个命令都可以互换使用。命令所属的命令集由第一个字符决定。这意味着在通信错误的情况下,消息解析器可能会误解错误后面的字符。消息分析器在超时后重置。

为了理解通信的所有细节,通常最好查看GUI的源代码(包含在任何固件包中)。它是用Perl编写的,Perl足够原始,可以轻松理解代码。

1 串口通信——简单指令

通过串口进行通信的协议遵循以下规则:

  • 控制板根据接收到的命令发送一个或多个字符的对应数据流进行相应。
  • 控制板不会主动发送数据,它只会根据接收到的指令来进行响应而发数据。
  • 控制板会一直响应任何传入的命令,无论是否有效。

控制板返回的任何数据流以以下字符之一结尾:

  • “o”:表示一切正常,即已识别接收的命令
  • “e”:表示发生错误,即接收到无效命令
  • “T”:表示已发生超时,即由多个字符组成的命令未在某个时间窗口内完成。
  • “C”:表示发生校验和错误

每当传输数据时都会调用校验和,例如对于“p”、“g”和“d”命令。

下面列出最重要的简单命令。与GUI交互还需要更多的命令,可以通过查看GUI源代码来获得。

  • 命令t:此命令只返回字符“o”。主机可以使用它来检查板是否仍然连接。
  • 命令v:此命令返回有关已安装固件版本、板名和板类型的信息。数据流有校验位并以字符“o”结束。
  • 命令g:此命令返回包含所有参数值的数据流。数据流有校验位并以字符“o”结束。
  • 命令p:此命令设置所有参数值。命令字符“p”后面需要跟一个包含所有参数值的数据流,数据流有校验位。它返回字符“o”。
  • 命令 d :收到命令“d”后,控制板传输当前的实时数据流,最后附加一个2字节的校验位,并以一个字符’o’结束。协议完整信息可以参考链接获得。
  • 命令s:这个功能基本与命令d相同,但是只传输前5个数据值。

注:程序中所有的校验位计算算法源码请参考3轴云台校验位计算源码

2 串口通信——RC 指令

除了上一节中描述的简单串口指令外,Storm32控制器还能处理一些针对万向节远程控制的消息。这些消息具有更严格的数据格式,并可能提供更高级别的传输可靠性。传输的规则与前面一样。

数据帧的一般结构是:

  • 包头:0xFA用于信息输入,0xFB用于信息输出
  • 长度:有效数据包长度,即数据包的字节数,不包括起始符号、长度字节、命令字节和CRC字
  • 命令:命令字节
  • 有效数据:数据和长度根据需求确定
  • 校验位:x25 16-bit 校验位,不包括起始字节。

如果不需要回应的话,可以将0xfa替换为0xf9。下面是几种常用的控制指令

  • CMD_GETVERSION(#1) 指令:0xFA 0x00 0x01 crc-low-byte crc-high-byte
    如果发生错误,则接收到一个CMD_ACK消息,否则将返回得到固件版本、安装布局版本和此格式的板功能的消息。
    0xFB 0x06 0x00 data1-low data1-high data2-low data2-high data3-low data3-high crc-low-byte crc-high-byte
    其中data1表示固件版本,data2表示安装布局版本,data3表示版功能值。

  • CMD_GETVERSIONSTR(#2) 指令:0xFA 0x00 0x02 crc-low-byte crc-high-byte
    如果发生错误,将发出CMD_ACK消息。否则,将发出包含此格式的版本字符串,名称字符串和电路板字符串的消息:
    0xFB 0x30 0x02 data-stream crc-low-byte crc-high-byte
    数据流包含16字节版本字符串,16字节名称字符串和16字节板字符串。

  • CMD_GETPARAMETER(#3) 指令:0xFA 0x02 0x03 data-low-byte data-high-byte crc-low-byte crc-high-byte
    数据类型为uint16_t,表示请求的参数编号。如果发生错误,将发出CMD_ACK消息。否则,将发出包含此格式的参数值的消息:
    0xFB 0x04 0x03 data1-low-byte data1-high-byte data2-low-byte data2-high-byte crc-low-byte crc-high-byte
    Data1是参数编号,data2是参数值。

  • CMD_SETPARAMETER(#4) 指令:0xFA 0x04 0x04 data1-low-byte data1-high-byte data2-low-byte data2-high-byte crc-low-byte crc-high-byte
    Data1是参数编号,data2是参数值。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_GETDATA(#5) 指令:0xFA 0x01 0x05 type-byte crc-low-byte crc-high-byte
    Type指定所请求数据流的类型; 目前只支持类型0。如果发生错误,将发出CMD_ACK消息。否则,将发出包含此格式的数据流的消息:
    0xFB 0x4A 0x05 type-byte 0x00 data-stream crc-low-byte crc-high-byte
    数据流包含与’d’命令发送的数据相同的数据。

  • CMD_GETDATAFIELDS(#6) 指令:0xFA 0x02 0x06 data-low-byte data-high-byte crc-low-byte crc-high-byte
    数据类型为uint16_t,表示一个位掩码,用于指定应发送哪些数据。如果发生错误,将发出CMD_ACK消息。否则,将发出包含位掩码字和此格式的所有请求数据的消息:
    0xFB LEN 0x06 data1-low-byte data1-high-byte data-stream crc-low-byte crc-high-byte
    Data1是位掩码字,数据流保存数据。可以触发以下数据位:

0x0001 = LIVEDATA_STATUS_V1 //已弃用,请勿使用
0x0002 = LIVEDATA_TIMES
0x0004 = LIVEDATA_IMU1GYRO
0x0008 = LIVEDATA_IMU1ACC
0x0010 = LIVEDATA_IMU1R
0x0020 = LIVEDATA_IMU1ANGLES
0x0040 = LIVEDATA_PIDCNTRL
0x0080 = LIVEDATA_INPUTS
0x0100 = LIVEDATA_IMU2ANGLES
0x0200 = LIVEDATA_STATUS_DISPLAY
0x0400 = LIVEDATA_STORM32LINK
0x0800 = LIVEDATA_IMUACCCONFIDENCE
0x1000 = LIVEDATA_ATTITUDE_RELATIVE
0x2000 = LIVEDATA_STATUS_V2
0x4000 = LIVEDATA_ENCODERANGLES
0x8000 = LIVEDATA_IMUACCABS
  • CMD_SETPITCH(#10) 指令:0xFA 0x02 0x0A data-low-byte data-high-byte crc-low-byte crc-high-byte
    数据类型为uint16_t,可以采用值700 … 2300。它代表音俯仰输入值。如果发送值0,则将重新调整俯仰轴,忽略任何其他值。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_SETROLL(#11) 指令:0xFA 0x02 0x0B data-low-byte data-high-byte crc-low-byte crc-high-byte
    数据类型为uint16_t,可以采用值700 … 2300。它表示滚转输入值。如果发送值0,则将重新定位滚动轴。忽略任何其他值。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_SETYAW(#12) 指令:0xFA 0x02 0x0C data-low-byte data-high-byte crc-low-byte crc-high-byte
    数据类型为uint16_t,可以采用值700 … 2300。它代表偏航输入值。如果发送值0,则偏移轴将被重新定位。忽略任何其他值。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_SETPANMODE(#13) 指令:0xFA 0x01 0x0D data-byte crc-low-byte crc-high-byte
    该数据的类型为uint8_t,并且可以假设这些值:0 = off,1 = HOLDHOLDPAN,2 = HOLDHOLDHOLD,3 = PANPANPAN,4 = PANHOLDHOLD,5 = PANHOLDPAN,6 = HOLDPANPAN。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_SETSTANDBY(#14) 指令:0xFA 0x01 0x0E data-byte crc-low-byte crc-high-byte
    数据类型为uint8_t,可以采用以下值:0 = off,1 = on。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_DOCAMERA(#15) 指令:0xFA 0x06 0x0F dummy-byte data-byte dummy-byte dummy-byte dummy-byte dummy-byte crc-low-byte crc-high-byte
    数据类型为uint8_t,并且可以采用以下值:0 =关闭,1 = IRSHUTTER,2 = IRSHUTTERDELAYED,3 = IRVIDEOON,4 = IRVIDEOOFF。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_SETSCRIPTCONTROL(#16) 指令:0xFA 0x02 0x10 data1-byte data2-byte crc-low-byte crc-high-byte
    data1和data2的类型为uint8_t。Data1是脚本的编号,data2可以采用以下值:0 = off,1 = CASE#DEFAULT,2 = CASE#1,3 = CASE#2,4 = CASE#3。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_SETANGLE(#17) 指令:0xFA 0x0E 0x11 float1 float2 float3 flags-byte type-byte crc-low-byte crc-high-byte
    float1,float2,float3字段各占4个字节。它们是浮点型,对应于俯仰,滚转和偏航角度。flags字节允许修改每个轴的角度设置的行为。它们可以处于无限制或有限模式。在无限制模式下,相应的轴可以无限制地设置为任何角度,绕过RcMin和RcMax设置,并且可以同时用于“相对”和“绝对”。在限制模式下,角度设置受RcMin和RcMax的影响设置,仅适用于“绝对”。标志字节的第一位0x01对应于音高,0x02对应于滚动,0x04对应于偏航,并且当设置时,相应的轴处于受限模式。当前未使用类型字节,必须将其设置为零。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_SETPITCHROLLYAW(#18) 指令:0xFA 0x06 0x12 data1-low-byte data1-high-byte data2-low-byte data2-high-byte data3-low-byte data3-high-byte crc-low-byte crc-high-byte
    data1,data2和data3各自为uint16_t类型,并且可以采用值700 … 2300。它们代表俯仰,滚转,偏航输入值。如果发送值0,则将重新定位相应的轴。忽略任何其他值。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_SETPWMOUT(#19) 指令:0xFA 0x02 0x13 data-low-byte data-high-byte crc-low-byte crc-high-byte
    数据类型为uint16_t,可以采用值700 … 2300。它代表pwm传递输入值。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_RESTOREPARAMETER(#20) 指令:0xFA 0x02 0x14 data-low-byte data-high-byte crc-low-byte crc-high-byte
    数据类型为uint16_t并保存参数编号。此命令将参数设置为EEPROM中的值。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_RESTOREALLPARAMETER(#21) 指令:0xFA 0x00 0x15 crc-low-byte crc-high-byte
    该命令将所有参数设置为存储在EEPROM中的值。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_SETINPUTS(#22) 指令:0xFA 0x17 0x16 data-bytes crc-low-byte crc-high-byte
    如果未配置虚拟输入,则会覆盖从虚拟输入接收的数据。数据字节的格式与sbus类似:16个11位值的通道组合成22个字节,加上一个状态字节。

  • CMD_SETHOMELOCATION(#23) 指令:0xFA 0x0E 0x17 data-bytes crc-low-byte crc-high-byte
    这将设置STorM32控制器的起始位置。

  • CMD_SETTARGETLOCATION(#24) 指令:0xFA 0x0E 0x18 data-bytes crc-low-byte crc-high-byte
    这将设置STorM32控制器应将摄像机指向的目标位置。

  • CMD_ACTIVEPANMODESETTING(#100) 指令:0xFA 0x01 0x64 data-byte crc-low-byte crc-high-byte
    数据类型为uint8_t,是与平移模式设置相关的位字段:默认设置= 0x00,设置#1 = 0x01,设置#2 = 0x02,设置#3 = 0x03。作为对该命令的响应,将发出CMD_ACK消息。

  • CMD_ACK(#150) 指令:0xFB 0x01 0x96 data-byte crc-low-byte crc-high-byte
    该命令由STorM32控制器发送,以确认执行收到的RC命令消息(如果消息本身不导致响应,例如get参数命令)。数据类型为uint8_t,可以采用以下值:

0 = SERIALRCCMD_ACK_OK
1 = SERIALRCCMD_ACK_ERR_FAIL
2 = SERIALRCCMD_ACK_ERR_ACCESS_DENIED
3 = SERIALRCCMD_ACK_ERR_NOT_SUPPORTED
150 = SERIALRCCMD_ACK_ERR_TIMEOUT
151 = SERIALRCCMD_ACK_ERR_CRC
152 = SERIALRCCMD_ACK_ERR_PAYLOADLEN
  • CMD_CONNECT(#120) 指令:
    特殊命令:用于处理ArduPilot passthrough。

  • CMD_GETDATADISPLAY(#123) 指令:
    特殊命令:用于将状态信息发送到例如连接的OLED显示器。

  • CMD_WIFICONNECTEDPING(#215) 指令:
    特殊命令:由连接的ESP8266 wifi模块发送,指示wifi连接状态。

  • CMD_STORM32LINK_V1(#217) 指令:
    特殊命令:用于从飞行控制器发送到STorM32-Link的STorM32。

  • CMD_STORM32LINK_V2(#218) 指令:
    特殊命令:用于从飞行控制器发送到STorM32-Link的STorM32。

3 串口通信——Mavlink指令

目前自己没有Mavlink的开发经验,这里先空着,等需要时候再进行分析。

4 总结

基本上目前需要的功能协议都已经获得,下一步就是根据这些协议对目标进行控制。刚开始研究三轴云台,欢迎讨论。

STorM32 BGC 三轴云台学习(一) 通信协议分析相关推荐

  1. storm32云台说明书_俄版SimpleBGC、Storm32开源三轴云台软硬件以及调参软件说明书-V1.02...

    本方案采用开源方案,云台嵌入式软件采用simpleBGC开源代码,并参考了网上"SimpleBGC32- 开源三轴无刷云台算法完全解说"修改而成,程序在STorM32 BGC V1 ...

  2. sbus storm32bgc_STorM32 BGC三轴增稳云台驱动下载

    STorM32 BGC是一种硬件开源.软件闭源的三轴稳定云台控制项目.云台在我们生活中是越来越常见,我们手机拍照用的手持云台,无人机上挂载摄像机的机载隔振云台.我们在电影<流浪地球>里面那 ...

  3. SimpleBGC三轴云台用户手册

    SimpleBGC三轴云台用户手册 V1.00 硬件平台:STorM BGC V1.31. 软件框架:SimpleBGC_V1.00. 本方案是采用俄版STorM BGC硬件平台,软件采用Simple ...

  4. 开源俄版三轴云台软硬件、调参软件调试可用,代码开源,入门说明

    本方案采用开源方案,云台嵌入式软件采用simpleBGC开源代码,并参考了网上"SimpleBGC32- 开源三轴无刷云台算法完全解说"修改而成,程序在STorM32 BGC V1 ...

  5. sbus storm32bgc_STorM32 BGC三轴增稳云台固件更新

    STorM32 BGC是一种硬件开源.软件闭源的三轴稳定云台控制项目.云台在我们生活中是越来越常见,我们手机拍照用的手持云台,无人机上挂载摄像机的机载隔振云台.我们在电影<流浪地球>里面那 ...

  6. 开源三轴云台EVVGC(simple BGC)分析

    一. 主程序分析 主程序结构清晰,流程如图所示,下面将对每个部分做详细分析 二. 系统初始化 系统初始化部分的流程如上图所示,下面对每部分做具体分析 1. 时钟初始化 该部分主要是使能DWT,用DWT ...

  7. 20201114-三轴云台storm32 BGC HAKRC调试+

    storm32 BGC HAKRC 2轴云台支持俯仰(抬头低头)以及横滚: 三轴多了一个航向.支持锁头模式,拍摄更方便. 可以控制俯仰通过接收机或者其他单独PWM通道 可以设置跟随模式或者锁定模式 可 ...

  8. datavideo切换台说明书_巴掌大三轴稳定器,稳过微云台,试试飞宇VLOGPocket2

    几乎全民VLOG的时代,我们随处可见有人举着手机.相机记录生活,甚至还有品牌推出了自带微云台的手机.不过,即便在手机上硬"塞"进一个微云台,效果也始终无法媲美真正的云台,对视频拍摄 ...

  9. 鸡头稳如云台_三轴增稳云台是怎么让相机、手机「稳如鸡头」的?

    若问手持普通手机.无防抖的相机在移动状态下拍摄视频最烦人的是什么,或许绝大多数人的回答就是拍摄后画面抖动.不稳定. 解决视频拍摄画面不稳的方法其实很多,可以考虑添置一款机械稳定器,也可以考虑添置一台三 ...

最新文章

  1. 皮一皮:皇上,他在下毒!
  2. linux下makefile使用
  3. boost::math模块两个 Lambert W 函数的最基本调用示例
  4. 光骓者的荣耀(洛谷P5638题题解,弃坑Java拥抱C++)
  5. 微信小程序实战篇:基于wxcharts.js绘制移动报表
  6. Rust FFI 编程 - Rust 语言层面对 FFI 的支持
  7. 7个Python实战项目(附源码),拿走就用
  8. java excel批量导入数据库数据_java把excel数据批量导入到数据库
  9. AI,机器学习(模式识别),深度学习的区别与联系
  10. 深度摄像头:一:深度了解深度摄像头
  11. 64位Sql Server 2005开发版于64位Windows7旗舰版 安装过程
  12. php 786.00,美國佛羅裡達州區號786
  13. python日常实用技能:如何用Python将图片批量从png格式转换至WebP格式
  14. 可以在windows下预览SVG文件 SVG Explorer Extension
  15. Executors.newFixedThreadPool(int threads)和Executors.newCachedThreadPool()
  16. And and Pair
  17. 盘口技术大全(六): 吸筹与试盘
  18. 中国石油大学(北京)-《石油加工工程》第一阶段在线作业
  19. idea中没有 program arguments 选项
  20. 云鹊医认证审核需要多久_云鹊医电脑版下载-云鹊医电脑版下载v3.0.6-西西软件下载...

热门文章

  1. 2022山东省安全员C证操作证考试题及答案
  2. 使用Session+Cookie实现7天免登录
  3. js逆向 事件点击找加密位置
  4. centos使用yum时提示Segmentation fault错误的深入研究
  5. 李沐学AI之数据探索性分析
  6. 阿里云API网关使用教程
  7. python04-集合与字典
  8. java语言基础(七):Collection、泛型、案例:斗地主
  9. IOS使用高德地图获取当前位置信息
  10. 微信小程序获取微信绑定授权手机号