依赖与架构准备
This commit is contained in:
310
docs/IMU/command.md
Normal file
310
docs/IMU/command.md
Normal file
@@ -0,0 +1,310 @@
|
||||
# FDILink指令配置示例
|
||||
|
||||
## 进入配置模式
|
||||
|
||||
```uart
|
||||
#fconfig\r\n
|
||||
```
|
||||
|
||||
## 滤波器开关配置示例——将3D磁力计的融合开关打开
|
||||
|
||||
```uart
|
||||
#fconfig\r\n // 1. 进入配置模式
|
||||
#fparam get AID_MAG_V_MAGNETIC\r\n // 2. 获取当前滤波器状态
|
||||
#fparam set AID_MAG_V_MAGNETIC 1\r\n // 3. 设置3D磁辅助为打开状态
|
||||
#fsave\r\n // 4. 保存设置
|
||||
#freboot\r\n // 5. 重启设备
|
||||
```
|
||||
|
||||
## 将COM2 改成NMEA(OUT) 协议
|
||||
|
||||
```uart
|
||||
#fparam get AID_GNSS_VEL_UPDATE\r\n
|
||||
#fparam get MAG_GEOMAGFIELD_B\r\n
|
||||
#fconfig\r\n
|
||||
#fdeconfig\r\n
|
||||
#fsave\r\n
|
||||
#freboot\r\n
|
||||
y\r\n
|
||||
#fconfig\r\n
|
||||
```
|
||||
|
||||
## 设置端口1的类型为MAIN
|
||||
|
||||
```uart
|
||||
#fparam set COMM_STREAM_TYP1 1\r\n
|
||||
```
|
||||
|
||||
## 设置端口4的类型为NONE
|
||||
|
||||
```uart
|
||||
#fparam set COMM_STREAM_TYP4 0\r\n
|
||||
```
|
||||
|
||||
## 波特率修改配置
|
||||
|
||||
```uart
|
||||
#fimucal_gyro\r\n
|
||||
#fmagcal3d\r\n
|
||||
#faxis\r\n
|
||||
#fmsg 40 100\r\n
|
||||
#fmsg\r\n
|
||||
#fante\r\n
|
||||
```
|
||||
|
||||
```c
|
||||
Stream_TxBlock(stream, "UNLOG\r\n", strlen("UNLOG\r\n"));
|
||||
// Stream_TxBlock(stream, "GPGGA 1\r\n", strlen("GPGGA 1\r\n")); //增加NMEA解析数据会有2-3s延迟 字符形式解析慢
|
||||
Stream_TxBlock(stream, "AGRICB 0.1\r\n", strlen("AGRICB 0.1\r\n"));
|
||||
Stream_TxBlock(stream, "LOG PSRDOPB ONCHANGED\r\n", strlen("LOG PSRDOPB ONCHANGED\r\n"));
|
||||
Stream_TxBlock(stream, "LOG PSRVELB ONTIME 0.1\r\n", strlen("LOG PSRVELB ONTIME 0.1\r\n"));
|
||||
// Stream_TxBlock(stream, "LOG PSRPOSB ONTIME 0.1\r\n", strlen("LOG PSRPOSB ONTIME 0.1\r\n"));
|
||||
Stream_TxBlock(stream, "LOG HEADINGB ONTIME 0.1\r\n", strlen("LOG HEADINGB ONTIME 0.1\r\n"));
|
||||
// Stream_TxBlock(stream, "LOG BESTXYZB ONTIME 0.1\r\n", strlen("LOG BESTXYZB ONTIME 0.1\r\n"));
|
||||
```
|
||||
|
||||
## fconfig指令
|
||||
|
||||
| 属性 | 内容 |
|
||||
|:---|:---|
|
||||
| **命令** | **#fconfig** |
|
||||
| 说明 | 使导航设备由导航模式进入配置模式,配置模式下设备不再进行导航也不输出数据。所有配置命令仅在配置模式下有效。配置完成后请保存,否则已配置项不会保存和生效 |
|
||||
| 格式 | `#fconfig<CR><LF>` |
|
||||
| 需要确认 | 否 |
|
||||
| 重启生效 | 否 |
|
||||
| 示例 | 输入:`#fconfig` — 导航设备停止输出导航结果,并输出: `#OK` |
|
||||
|
||||
## fdeconfig指令
|
||||
|
||||
| 属性 | 内容 |
|
||||
|:---|:---|
|
||||
| **命令** | **#fdeconfig** |
|
||||
| 说明 | 使导航设备由配置模式恢复导航模式 |
|
||||
| 格式1 | `#fdeconfig<CR><LF>` |
|
||||
| 需要确认 | 否 |
|
||||
| 重启生效 | 否 |
|
||||
| 示例 | 输入:`#fdeconfig` — 导航设备重新输出导航数据 |
|
||||
| 回复 | `*#OK` — 成功进入导航模式 |
|
||||
|
||||
## freboot
|
||||
|
||||
| 属性 | 内容 |
|
||||
|:---|:---|
|
||||
| **命令** | **#freboot** |
|
||||
| 说明 | 重新热启动设备 |
|
||||
| 格式 | `#freboot` |
|
||||
| 需要确认 | 是 |
|
||||
| 重启生效 | 否 |
|
||||
| 示例 | 输入`#freboot`,设备重新热启动 |
|
||||
| 备注 | 重新启动时所有未保存的设置将不会保存,也不会生效。重新启动命令不会重启 gnss 模组 |
|
||||
|
||||
## freset
|
||||
|
||||
| 属性 | 内容 |
|
||||
|:---|:---|
|
||||
| **命令** | **#freset** |
|
||||
| 说明 | 将配置恢复到出厂初始值,恢复出厂配置后用户配置将全部清除,固件版本保持不变 |
|
||||
| 格式 | `#freset` |
|
||||
| 需要确认 | 是 |
|
||||
| 重启生效 | 否 |
|
||||
| 示例 | `#freset` |
|
||||
| 备注 | 通过上位机的参数导出按钮可以将重置之前的用户配置保存下来 |
|
||||
|
||||
## fsave
|
||||
|
||||
| 属性 | 内容 |
|
||||
|:---|:---|
|
||||
| **命令** | **#fsave** |
|
||||
| 说明 | 配置保存 |
|
||||
| 格式 | `#fsave` |
|
||||
| 需要确认 | 否 |
|
||||
| 重启生效 | 否 |
|
||||
| 示例 | `#fsave` |
|
||||
| 备注 | 几乎所有的配置更改后都需要执行配置保存操作,这样重启后才能保证配置生效 |
|
||||
|
||||
## fante
|
||||
|
||||
| 属性 | 内容 |
|
||||
|:---|:---|
|
||||
| **命令** | **#fante** |
|
||||
| 说明 | 配置双天线航向与载体前向夹角 |
|
||||
| 格式1 | `#fante<CR><LF>` — 查询GNSS天线配置信息:双天线航向偏角、双天线基线长度、天线杆臂 |
|
||||
| 格式2 | `#fanteheadbias angle<CR><LF>` — 其中 angle 为角度值,值域在 0 至 360°间 |
|
||||
| 格式3 | `#fantebaseline length<CR><LF>` — 配置双天线之间基线的长度,length单位为米m |
|
||||
| 格式4 | `#fantearm x y z<CR><LF>` — 配置GNSS主天线到IMU的杆臂命令 |
|
||||
| 示例 | 将双天线航向与载体前向夹角设置为 270 度:<br>输入:`#fanteheadbias 270.0`<br>输出:`*#OK` |
|
||||
| 备注 | 定义:主天线到从天线为基线矢量正方向,从IMU正上方看去,顺时针为天线航向偏角的正方向 |
|
||||
|
||||
## fimucal
|
||||
|
||||
| 属性 | 内容 |
|
||||
|:---|:---|
|
||||
| **命令** | **#fimucal** |
|
||||
| 说明 | 校准陀螺仪、加表的常值零偏以及调平 |
|
||||
| 格式1 | `#fimucal_level<CR><LF>` — 将IMU坐标系调平至水平面,不改变陀螺和加表零偏 |
|
||||
| 格式2 | `#fimucal_acce<CR><LF>` — 执行加速度计零偏校准 |
|
||||
| 格式3 | `#fimucal_gyro<CR><LF>` — 执行陀螺仪零偏校准 |
|
||||
| 需要确认 | 否 |
|
||||
| 重启生效 | 是 |
|
||||
| 示例 | 输入`#fimucal_level`,IMU调平校准 |
|
||||
| 备注 | **注意!** 格式1和格式2需要在水平静止状态下执行该命令;格式3只需要模块保持静止 |
|
||||
|
||||
## fmsg
|
||||
|
||||
| 属性 | 内容 |
|
||||
|:---|:---|
|
||||
| **命令** | **#fmsg** |
|
||||
| 说明 | 配置发送的数据内容 |
|
||||
| 格式1 | `#fmsg` — 查询当前数据包信息。显示内容包括所有支持的数据包以及数据包ID以及其发送频率 |
|
||||
| 格式2 | `#fmsg msg freq` — msg为2位十六进制数字,表示数据包ID;freq为设置指定数据包的发送频率 |
|
||||
| 需要确认 | 否 |
|
||||
| 重启生效 | 是 |
|
||||
| 示例 | 输入:`#fmsg 40 100`,表示IMU数据以100Hz的频率发送<br>输出:`IMU [40] 100.0Hz`,表示IMU数据已经设置为100Hz的发送频率 |
|
||||
|
||||
## fparam
|
||||
|
||||
| 属性 | 内容 |
|
||||
|:---|:---|
|
||||
| **命令** | **#fparam** |
|
||||
| 说明 | 读取或配置参数 |
|
||||
| 格式1 | `#fparam get paramName` — paramName 需要获取的参数名称 |
|
||||
| 格式2 | `#fparam set paramName paramValue` — paramName需要设置的参数名称;paramValue参数的数值,十进制 |
|
||||
| 需要确认 | 否 |
|
||||
| 重启生效 | 是 |
|
||||
| **配置说明1:串口波特率配置** | paramName的值和paramValue的值见表1 (DETA系列) 和表2 (EPSILON系列),默认配置中COMM_BAUD1 (端口1) 的波特率被设置为921600bps |
|
||||
| **示例1** | 输入:`#fparam get COMM_BAUD2\r\n`<br>输出:`COMM_BAUD2=5`,表示现在端口2为 115200bps<br>输入:`#fparam set COMM_BAUD2 8\r\n`<br>输出:`*#OK`,表示成功将端口2改为921600bps |
|
||||
| **备注1** | 默认端口1配置为Main协议,若端口1配置为其它波特率,则保存重启后波特率也需要重新选择,同时**强烈不建议**将Main协议端口的波特率设置在115200bps以下 |
|
||||
| **配置说明2:滤波开关配置** | 除了在上位机配置滤波器开关外,用户同样可以使用串口指令进行配置:paramName的值可见表3,相应的paramValue为0或者1;0表示关闭,1表示打开 |
|
||||
| **示例2** | 输入:`#fparam get AID_MAG_2D_MAGNETIC\r\n`<br>输出:`AID_MAG_2D_MAGNETIC=1`,表示磁力计2D辅助开关是打开的<br>输入:`#fparam set AID_MAG_2D_MAGNETIC 0\r\n`<br>输出:`*#OK`,表示不使用磁力计进行融合 |
|
||||
| **备注2** | 滤波开关的配置最好在测试前进行,测试中对滤波开关进行配置可能会破坏滤波器的稳定,容易导致位姿的突变与发散 |
|
||||
| **配置说明3:传感器参数修改** | 用户可以使用串口指令查看或者修改位于上位机 Onboard Parameters里的所有传感器参数,包含imu参数、GNSS参数、DEBUG参数等等 |
|
||||
| **示例3** | 输入:`#fparam get IMU_ACC_AVG\r\n`<br>输出:`IMU_ACC_AVG=9.794700`,表示当地重力加速度计为9.794700m/s²<br>输入:`#fparam get GNSS_MIN_VACC\r\n`<br>输出:`GNSS_MIN_VACC=2.500000`,表示当GNSS垂直方向的精度小于2.5m这个阈值时,才会使用GNSS进行组合导航<br>输入:`#fparam set GNSS_MIN_VACC 0.1\r\n`<br>输出:`*#OK`,表示成功将GNSS垂直方向的阈值设置为0.1m,这在客户使用RTK高精度组合导航时是有用的,可以防止在GNSS信号变差时对系统造成一定的负面影响 |
|
||||
| **备注3** | 传感器参数的修改一般只用于FDISYSTEMS研发人员的调试阶段,除非用户对该领域很熟悉,否则不建议自行修改 |
|
||||
| **配置说明4:端口协议配置** | 端口协议除了在上位机配置外,还能使用串口指令进行配置,端口协议见表4,常用的端口协议为Main、NAV、RTCM、NMEA和Ublox |
|
||||
| **示例4** | 输入:`#fparam get COMM_STREAM_TYP1\r\n`<br>输出:`COMM_STREAM_TYP1=1`,表示端口1配置为Main协议<br>输入:`#fparam set COMM_STREAM_TYP2 2\r\n`<br>输出:`*#OK`,表示将端口2配置为NAV协议,即可以通过端口2获取FDILink协议的数据;此时用户通过端口1或端口2均能获取数据,此外端口1还能连接上位机,便于实时调试<br>输入:`#fparam set COMM_STREAM_TYP3 6\r\n`<br>输出:`*#OK`,表示将端口3配置为Ublox模式,如果端口3有接收到Ublox类型的数据,保存重启后即可实现GPS/INS组合导航 |
|
||||
| **备注4** | 上述所有配置内容都需要`#fsave`保存,否则重新上电后失效;<br>此外所有端口中必须有一个配置为Main协议,只有该端口可以连接上位机 |
|
||||
|
||||
## fmagcal2d
|
||||
|
||||
| 属性 | 内容 |
|
||||
|:---|:---|
|
||||
| **命令** | **#fmagcal2d** |
|
||||
| 说明 | 磁力计2d校准指令,输入完成后用户在平面上沿模块中心缓慢旋转一周后完成校准,完成后自动保存校准数据并退出当前的配置模式 |
|
||||
| 格式1 | `#fmagcal2d` |
|
||||
| 需要确认 | 否 |
|
||||
| 重启生效 | 是 |
|
||||
| 示例 | 输入:`#fmagcal2d\r\n`<br>输出:`*#OK`,表示可以开始进行2d校准<br>输出:`This is a magnetometer 2D calibration. Please wait until the magnetometer progress bar reaches 100 percent Now: 0 percent`<br>表示2D校准的实时进度,刷新频率为1HZ。当进度到达100 percent表示校准成功系统将立即退出当前配置模式,重新发送FDILink数据 |
|
||||
|
||||
## fmagcal3d — 3D磁校准指令
|
||||
|
||||
| 属性 | 内容 |
|
||||
|:---|:---|
|
||||
| **命令** | **#fmagcal3d** |
|
||||
| 说明 | 磁力计3d校准指令,输入完成后用户在空中缓慢画8字进行校准,完成后自动保存校准数据退出当前的配置模式 |
|
||||
| 格式1 | `#fmagcal3d` |
|
||||
| 需要确认 | 否 |
|
||||
| 重启生效 | 是 |
|
||||
| 示例 | 输入:`#fmagcal3d\r\n`<br>输出:`*#OK`,表示可以开始进行3d校准<br>输出:<br>`This is a magnetometer 3D calibration.`<br>`The fitting error of the current calculation: xxx`<br>`Calibration Algorithm: xxx`<br>表示3D校准的实时状态,刷新频率为1HZ。"The fitting error of the current calculation : xxx"表示当前计算的拟合误差,参数类型为单精度浮点数类型。"Calibration Algorithm: xxx"表示的是校准算法等级,参数等级分为Low, Mid, High三种。当计算的拟合误差小于3.000f,并算法等级等于High时表示校准成功系统将立即退出当前配置模式,即重新发送FDILink数据 |
|
||||
|
||||
## fdgnss
|
||||
|
||||
| 属性 | 内容 |
|
||||
|:---|:---|
|
||||
| **命令** | **#fdgnss** |
|
||||
| 说明 | 读取或配置上位机DGNSS栏参数 |
|
||||
| 格式1 | `#fdgnss get gnssName`<br>gnssName 需要获取的参数名称,包含:<br>• `RTCM_TYPE` — 发送或接收RTCM的方式<br>• `NET_INFO_IMEI` — SIM卡的IMEI信息(无法配置)<br>• `NET_INFO_CCID` — SIM卡的CCID信息(无法配置)<br>• `NTRIP_SVR_DOMAIN` — Ntrip的IP地址<br>• `NTRIP_SVR_PORT` — Ntrip的IP端口<br>• `NTRIP_MOUNT` — Ntrip的挂载点<br>• `NTRIP_ACCOUNT` — Ntrip账号<br>• `NTRIP_PASSWORD` — Ntrip密码<br>• `FDI_AUTH` — FDI云鉴权码 |
|
||||
| 格式2 | `#fdgnss set gnssName gnssValue`<br>gnssName 需要设置的参数名称<br>gnssValue 参数的数值,十进制<br><br>**RTCM_TYPE参数特殊定义:**<br>• 0 — Radio<br>• 1 — 千寻位置SDK<br>• 2 — Ntrip配置<br>• 3 — FDI云<br><br>其余gnssValue无特殊定义 |
|
||||
| 需要确认 | 否 |
|
||||
| 重启生效 | 是 |
|
||||
| 示例1 | 输入:`#fdgnss get NTRIP_SVR_PORT\r\n`<br>输出:`NTRIP_SVR_PORT:8002`,表示Ntrip的IP端口为8002 |
|
||||
| 示例2 | **完整配置NTRIP账号过程:**<br>1. 输入:`#fdgnss set RTCM_TYPE 3\r\n` → 输出:`*#OK`(切换为NTRIP配置)<br>2. 输入:`#fdgnss set NTRIP_SVR_DOMAIN xxx.xxx.xx.xxx\r\n` → 输出:`*#OK`(IP配置成功)<br>3. 输入:`#fdgnss set NTRIP_SVR_PORT 8002\r\n` → 输出:`*#OK`(端口配置为8002)<br>4. 输入:`#fdgnss set NTRIP_MOUNT RTCM32_GGB\r\n` → 输出:`*#OK`(挂载点配置为RTCM32_GGB)<br>5. 输入:`#fdgnss set NTRIP_ACCOUNT qxx1234\r\n` → 输出:`*#OK`(账号配置为qxx1234)<br>6. 输入:`#fdgnss set NTRIP_PASSWORD 12345678\r\n` → 输出:`*#OK`(密码配置为12345678) |
|
||||
| 备注 | 上述所有配置内容都需要`#fsave`保存,否则重新上电后失效 |
|
||||
|
||||
## 附录表格
|
||||
|
||||
### 表1:DETA 系列v2端口波特率配置说明
|
||||
|
||||
| paramName | 端口说明 | paramValue | 对应波特率 |
|
||||
|:---|:---|:---:|:---|
|
||||
| COMM_BAUD1 | UART, TTL电平, 设置范围9600bps-921600bps | 1 | 9600bps |
|
||||
| | | 2 | 19200bps |
|
||||
| | | 3 | 38400bps |
|
||||
| COMM_BAUD2 | UART, TTL电平, 设置范围9600bps-921600bps | 4 | 76800bps |
|
||||
| | | 5 | 115200bps |
|
||||
| | | 6 | 230400bps |
|
||||
| COMM_BAUD3 | UART, TTL电平, 设置范围9600bps-921600bps | 7 | 460800bps |
|
||||
| | | 8 | 921600bps |
|
||||
| | | 9 | 2625000bps |
|
||||
| COMM_BAUD4 | UART, TTL电平, 设置范围9600bps-921600bps | 10 | 5250000bps |
|
||||
| | | 11 | 10500000bps |
|
||||
| | | 12 | 100000bps |
|
||||
| COMM_BAUD5 | CAN, 可设置波特率为250000bps、500000bps、1000000bps | 13 | 250000bps |
|
||||
| | | 14 | 500000bps |
|
||||
| | | 15 | 1000000bps |
|
||||
|
||||
### 表2:EPSILON系列端口波特率配置说明
|
||||
|
||||
| paramName | 端口说明 | paramValue | 对应波特率 |
|
||||
|:---|:---|:---:|:---|
|
||||
| COMM_BAUD1 | RS232,设置范围9600bps-921600bps | 1 | 9600bps |
|
||||
| | | 2 | 19200bps |
|
||||
| | | 3 | 38400bps |
|
||||
| COMM_BAUD2 | RS232,设置范围9600bps-921600bps | 4 | 76800bps |
|
||||
| | | 5 | 115200bps |
|
||||
| | | 6 | 230400bps |
|
||||
| COMM_BAUD3 | RS422,设置范围9600bps-921600bps | 7 | 460800bps |
|
||||
| | | 8 | 921600bps |
|
||||
| | | 9 | 2625000bps |
|
||||
| COMM_BAUD4 | GPIO TTL,设置范围9600bps-921600bps | 10 | 5250000bps |
|
||||
| | | 11 | 10500000bps |
|
||||
| | | 12 | 100000bps |
|
||||
| COMM_BAUD5 | CAN,可设置波特率为250000bps、500000bps、1000000bps | 13 | 250000bps |
|
||||
| | | 14 | 500000bps |
|
||||
| | | 15 | 1000000bps |
|
||||
|
||||
### 表3:SPKF融合开关说明
|
||||
|
||||
| paramName | 说明 |
|
||||
|:---|:---|
|
||||
| AID_ACCEL_GRAVITY | 加速度计融合开关 |
|
||||
| AID_BRO_ALT_UPDATE | 气压计融合开关 |
|
||||
| AID_CAR_CENT_ACCEL_NHC_ENABLED | 汽车向心加速度补偿开关 |
|
||||
| AID_CAR_YZ_ZERO_VEL_NHC_ENABLED | 汽车零速更新开关 |
|
||||
| AID_EXT_HEADING_UPDATE | 外部航向输入开关 |
|
||||
| AID_GNSS_POS_UPDATE | GNSS 位置融合开关 |
|
||||
| AID_GNSS_TRACK_HEADING_UPDATE | GNSS 航迹角融合开关 |
|
||||
| AID_GNSS_VEL_UPDATE | GNSS 速度融合开关 |
|
||||
| AID_GYO_TURN_ON_TARE_ENABLED | 开机时静态陀螺零偏估计开关 |
|
||||
| AID_INIT_YAW_USE_MAG | 磁力计初始化航向角开关 |
|
||||
| AID_MAG_2D_MAGNETIC | 磁航向融合开关 |
|
||||
| AID_MAG_3D_MAGNETIC | 磁矢量融合开关 |
|
||||
| AID_ODOMETER_VEL_UPDATE | 里程计融合开关 |
|
||||
| AID_OPTICFLOW_UPDATE | 光流计融合开关 |
|
||||
| AID_ZERO_POS_UPDATE | 零位置更新开关 |
|
||||
| AID_ZERO_RATE_UPDATE | 零角速度更新开关 |
|
||||
| AID_ZERO_VEL_UPDATE | 零速度更新 |
|
||||
|
||||
### 表4:端口协议类型与说明
|
||||
|
||||
| paramName | 端口协议 | 说明 | paramValue |
|
||||
|:---|:---|:---|:---:|
|
||||
| **COMM_STREAM_TYP(1-5)** | **None** | 空 | 0 |
|
||||
| | **Main** | 主协议,导航数据收发和连接上位机,通过0xF0切换模式 | 1 |
|
||||
| | **NAV** | 导航模式,收发 | 2 |
|
||||
| | **RTCM** | 接收差分修正数据v3版,D3 00开头 | 3 |
|
||||
| | **NMEA** | 接收NMEA格式数据 | 4 |
|
||||
| | **NMEA(OUT)** | 导航输出NMEA格式数据 | 5 |
|
||||
| | **Ublox** | 接收UBX格式数据 | 6 |
|
||||
| | **External Position** | 接收外部位置数据 | 7 |
|
||||
| | **External Velocity** | 接收外部速度数据 | 8 |
|
||||
| | **External Position&Velocity** | 接收外部位置和速度数据 | 9 |
|
||||
| | **External Attitude angle** | 接收外部姿态数据 | 10 |
|
||||
| | **External Time** | 接收外部时间数据 | 11 |
|
||||
| | **External Heading** | 接收外部航向数据 | 12 |
|
||||
| | **External Depth** | 接收外部深度数据 | 13 |
|
||||
| | **External SLAM1** | 接收外部slam1数据 | 14 |
|
||||
| | **External SLAM2** | 接收外部slam2数据 | 15 |
|
||||
| | **External Pitot Pressure** | 接收外部气压计数据 | 16 |
|
||||
| | **External Air speed** | 接收外部空速数据 | 17 |
|
||||
| | **External Odom** | 接收外部里程计数据 | 18 |
|
||||
| | **External LIDAR** | 接收外部雷达数据 | 19 |
|
||||
81
docs/IMU/packet.md
Normal file
81
docs/IMU/packet.md
Normal file
@@ -0,0 +1,81 @@
|
||||
# Data Packets
|
||||
|
||||
FDILink 数据包提供广泛的功能。fdilink 主要数据包包含两类 **State Packets** 可以读取相关的系统状态以及导航数据。
|
||||
|
||||
这些包可以通过上位机配置后让导航系统按照一定频率主动发送,也可以通过 **Request Packets** 请求发送对应的 State Packets。
|
||||
|
||||
## State Packets
|
||||
|
||||
| Packet ID | Name | Description | Length | R/W |
|
||||
|--- |--- |--- |--- |--- |
|
||||
| 39 | MSG_VERSION | 版本信息 | 26 | R |
|
||||
| 40 | MSG_IMU | IMU传感器数据 | 56 | R |
|
||||
| 41 | MSG_AHRS | 航姿参考系统数据 | 48 | R |
|
||||
| 42 | MSG_INS_GPS | 组合导航输出数据 | 72 | R |
|
||||
| 50 | MSG_SYS_STATE | 组合导航系统数据 | 100 | R |
|
||||
| 51 | MSG_UNIX_TIME | 系统UNIX时间 | 8 | R |
|
||||
| 52 | MSG_FORMAT_TIME | 系统格式时间 | 14 | R |
|
||||
| 53 | MSG_STATUS | 系统状态和滤波器状态 | 4 | R |
|
||||
| 54 | MSG_POS_STD_DEV | 卡尔曼滤波P矩阵的位置标准差 | 12 | R |
|
||||
| 55 | MSG_VEL_STD_DEV | 卡尔曼滤波P矩阵的速度标准差 | 12 | R |
|
||||
| 56 | MSG_EULER_ORIEN_STD_DEV | 卡尔曼滤波P矩阵的姿态角标准差 | 12 | R |
|
||||
| 57 | MSG_QUAT_ORIEN_STD_DEV | 卡尔曼滤波P矩阵的四元数标准差 | 16 | R |
|
||||
| 58 | MSG_RAW_SENSORS | 原始IMU传感器数据 | 48 | R |
|
||||
| 59 | MSG_RAW_GNSS | 原始GNSS数据 | 74 | R |
|
||||
| 5A | MSG_SATELLITE | 卫星简要信息 | 9 | R |
|
||||
| 5B | MSG_DETAILED_SATELLITE | 卫星详细信息 | X | R |
|
||||
| 5C | MSG_GEODETIC_POS | 卡尔曼滤波融合的经纬高数据 | 32 | R |
|
||||
| 5D | MSG_ECEF_POS | 卡尔曼滤波融合的ECEF系坐标数据 | 24 | R |
|
||||
| 5E | MSG_UTM_POS | 卡尔曼滤波融合的UTM坐标数据 | 14 | R |
|
||||
| 5F | MSG_NED_VEL | 卡尔曼滤波融合的北东地速度 | 12 | R |
|
||||
| 60 | MSG_BODY_VEL | 卡尔曼滤波融合的机体系XYZ速度 | 12 | R |
|
||||
| 61 | MSG_ACCELERATION | 滤波修正后的机体系加速度 | 12 | R |
|
||||
| 62 | MSG_BODY_ACCELERATION | 滤波修正后的机体系加速度-不含重力 | 16 | R |
|
||||
| 63 | MSG_EULER_ORIEN | 卡尔曼滤波融合的欧拉角 | 12 | R |
|
||||
| 64 | MSG_QUAT_ORIEN | 卡尔曼滤波融合的四元数 | 16 | R |
|
||||
| 65 | MSG_DCM_ORIEN | 方向余弦矩阵 | 36 | R |
|
||||
| 66 | MSG_ANGULAR_VEL | 滤波修正后的IMU角速度数据 | 12 | R |
|
||||
| 67 | MSG_ANGULAR_ACC | 卡尔曼滤波估计的IMU角加速度 | 12 | R |
|
||||
| 6D | MSG_RUNNING_TIME | 系统运行时长 | 8 | R |
|
||||
| 6E | MSG_LOCAL_MAG_FIELD | 磁传感器相关数据 | 24 | R |
|
||||
| 6F | MSG_ODOMETER_STATE | 系统解算后里程计相关数据 | 18 | R |
|
||||
| 72 | MSG_GEOID_HEIGHT | 卡尔曼滤波融合的大地高度 | 4 | R |
|
||||
| 75 | MSG_WIND | 系统解算后的风速 | 12 | R |
|
||||
| 76 | MSG_HEAVE | 船舶海浪升沉相关数据 | 16 | R |
|
||||
| 77 | MSG_RAW_SATELLITE | 原始星历数据 | X | R |
|
||||
| 78 | MSG_GNSS_DUAL_ANT | GNSS双天线原始数据 | 134 | R |
|
||||
| 7A | MSG_GIMBAL_STATE | 云台数据 | 8 | R |
|
||||
| 7B | MSG_AUTOMOTIVE | 车载相关数据 | 24 | R |
|
||||
| 80 | MSG_INSTALL_ALIGN | 系统安装偏移数据 | 45 | R |
|
||||
| 81 | MSG_FILTER_OPTIONS | 卡尔曼滤波器使能状态 | 12 | R |
|
||||
| 82 | MSG_GPIO_CONFIG | GPIO配置状态 | 5 | R |
|
||||
| 83 | MSG_MAG_CALI_VALUES | 磁力计校准参数 | 49 | R |
|
||||
| 84 | MSG_MAG_CALI_CONFIG | 磁校准方式 | 1 | R |
|
||||
| 85 | MSG_MAG_CALI_STATUS | 磁校准状态 | 3 | R |
|
||||
| 88 | MSG_REF_POINT_OFFSET | 船载参考点映射偏移量 | 49 | R |
|
||||
| A0 | MSG_BAUD_RATES | 端口的波特率配置状态 | 25 | R |
|
||||
| A1 | MSG_SENSOR_RANGES | 传感器量程 | 6 | R |
|
||||
|
||||
### 外部可写入指令数据帧
|
||||
|
||||
| Packet ID | Name | Description | Length | R/W |
|
||||
|--- |--- |--- |--- |--- |
|
||||
| 68 | MSG_EXT_PV | 外部输入速度和位置数据 | 60 | W |
|
||||
| 69 | MSG_EXT_POS | 外部输入位置数据 | 36 | W |
|
||||
| 6A | MSG_EXT_VEL | 外部输入NED速度数据 | 24 | W |
|
||||
| 6B | MSG_EXT_BODY_VEL | 外部输入机体系速度数据 | 24 | W |
|
||||
| 6C | MSG_EXT_HEADING | 外部输入航向数据 | 8 | W |
|
||||
| 70 | MSG_EXT_TIME | 外部输入时钟数据 | 8 | W |
|
||||
| 71 | MSG_EXT_DEPTH | 外部输入深度数据 | 8 | W |
|
||||
| 73 | MSG_RTCM_CORRECTIONS | 外部输入RTCM校准数据流 | X | W |
|
||||
| 74 | MSG_EXT_PITOT_PRESS | 外部输入皮托管气压数据 | 8 | W |
|
||||
| 79 | MSG_EXT_AIR | 外部输入空速数据 | 25 | W |
|
||||
| 90 | MSG_EXT_ODOM | 外部输入里程计数据 | 21 | W |
|
||||
| 91 | MSG_EXT_SLAM1 | 外部输入SLAM1格式数据 | 72 | W |
|
||||
| 94 | MSG_EXT_DVL | 外部输入多普勒计程仪数据 | 29 | W |
|
||||
|
||||
## Request Packets
|
||||
|
||||
| Packet ID | Name | Description | Length | R/W |
|
||||
|--- |--- |--- |--- |--- |
|
||||
| A0 | MSG_REQUEST_PACKET | 数据帧请求格式 | X | W |
|
||||
140
docs/IMU/protocol.md
Normal file
140
docs/IMU/protocol.md
Normal file
@@ -0,0 +1,140 @@
|
||||
# 数据类型
|
||||
|
||||
有以下数据类型被在通信协议中使用。 协议中的数据类型都是 **小端序**。
|
||||
|
||||
## 数据帧组成
|
||||
|
||||
| | 帧头 | 帧头 | 帧头 | 帧头 | 帧头 | 数据区 | 数据区 | 帧尾 |
|
||||
|--- |--- |--- |--- |--- |--- |--- |--- |--- |
|
||||
| | 起始 | 指令类别 | 数据长度 | 流水序号 | 帧头CRC8 | 数据CRC16 | 载荷 | 结束 |
|
||||
| 字节数 | 1 | 1 | 1 | 1 | 1 | 2 | 1-255 | 1 |
|
||||
| 数值 | 0xFC | **A** | **B** | **C** | **D** | 高字节(E), 低字节(E) || 0xFD |
|
||||
|
||||
- **A**: 指令的类别,如下表所示
|
||||
|
||||
| 指令类别 | | |
|
||||
|---|---|---|
|
||||
| 0x40 | 经过校准的IMU数据 | MSG_IMU |
|
||||
| 0x41 | AHRS数据 | MSG_AHRS |
|
||||
| 0x42 | INS/GPS数据 | MSG_INS/GPS |
|
||||
| 0x58 | 传感器原始数据 | MSG_RAW_GNSS |
|
||||
|
||||
- **B**: 载荷的字节数
|
||||
- **C**: 流水号,每发送一个数据帧数值加一,用于检测数据帧丢包
|
||||
- **D**: 帧头CRC8校验,计算帧头部分(起始标志 + 指令类别 + 数据长度 + 流水序号)
|
||||
- **E**: 数据CRC16校验,计算载荷数据的CRC16校验
|
||||
- **F**: 0xF0 是上位机心跳请求
|
||||
|
||||
## CRC8校验
|
||||
|
||||
CRC 8校验位:标志位 + 指令类别 + 数据长度 + 流水序号
|
||||
|
||||
CRC 8校验程序如下:
|
||||
|
||||
```c
|
||||
static const uint8_t CRC8Table[] = {
|
||||
0, 94, 188, 226, 97, 63, 221, 131, 194, 156, 126, 32, 163, 253, 31, 65,
|
||||
157, 195, 33, 127, 252, 162, 64, 30, 95, 1, 227, 189, 62, 96, 130, 220,
|
||||
35, 125, 159, 193, 66, 28, 254, 160, 225, 191, 93, 3, 128, 222, 60, 98,
|
||||
190, 224, 2, 92, 223, 129, 99, 61, 124, 34, 192, 158, 29, 67, 161, 255,
|
||||
70, 24, 250, 164, 39, 121, 155, 197, 132, 218, 56, 102, 229, 187, 89, 7,
|
||||
219, 133, 103, 57, 186, 228, 6, 88, 25, 71, 165, 251, 120, 38, 196, 154,
|
||||
101, 59, 217, 135, 4, 90, 184, 230, 167, 249, 27, 69, 198, 152, 122, 36,
|
||||
248, 166, 68, 26, 153, 199, 37, 123, 58, 100, 134, 216, 91, 5, 231, 185,
|
||||
140, 210, 48, 110, 237, 179, 81, 15, 78, 16, 242, 172, 47, 113, 147, 205,
|
||||
17, 79, 173, 243, 112, 46, 204, 146, 211, 141, 111, 49, 178, 236, 14, 80,
|
||||
175, 241, 19, 77, 206, 144, 114, 44, 109, 51, 209, 143, 12, 82, 176, 238,
|
||||
50, 108, 142, 208, 83, 13, 239, 177, 240, 174, 76, 18, 145, 207, 45, 115,
|
||||
202, 148, 118, 40, 171, 245, 23, 73, 8, 86, 180, 234, 105, 55, 213, 139,
|
||||
87, 9, 235, 181, 54, 104, 138, 212, 149, 203, 41, 119, 244, 170, 72, 22,
|
||||
233, 183, 85, 11, 136, 214, 52, 106, 43, 117, 151, 201, 74, 20, 246, 168,
|
||||
116, 42, 200, 150, 21, 75, 169, 247, 182, 232, 10, 84, 215, 137, 107, 53
|
||||
};
|
||||
uint8_t CRC8_Table(uint8_t* p, uint8_t counter)
|
||||
{
|
||||
uint8_t crc8 = 0;
|
||||
for (int i = 0; i < counter; i++)
|
||||
{
|
||||
uint8_t value = p[i];
|
||||
uint8_t new_index = crc8 ^ value;
|
||||
crc8 = CRC8Table[new_index];
|
||||
}
|
||||
return (crc8);
|
||||
}
|
||||
```
|
||||
|
||||
CRC8 校验程序调用举例:
|
||||
|
||||
```c
|
||||
uint8_t CRC8 = CRC8_Table(data, data_len);
|
||||
```
|
||||
|
||||
## CRC16校验
|
||||
|
||||
CRC 16校验:载荷
|
||||
|
||||
CRC 16校验程序如下:
|
||||
|
||||
```c
|
||||
static const uint16_t CRC16Table[256] =
|
||||
{
|
||||
0x0000, 0x1021, 0x2042, 0x3063, 0x4084, 0x50A5, 0x60C6, 0x70E7,
|
||||
0x8108, 0x9129, 0xA14A, 0xB16B, 0xC18C, 0xD1AD, 0xE1CE, 0xF1EF,
|
||||
0x1231, 0x0210, 0x3273, 0x2252, 0x52B5, 0x4294, 0x72F7, 0x62D6,
|
||||
0x9339, 0x8318, 0xB37B, 0xA35A, 0xD3BD, 0xC39C, 0xF3FF, 0xE3DE,
|
||||
0x2462, 0x3443, 0x0420, 0x1401, 0x64E6, 0x74C7, 0x44A4, 0x5485,
|
||||
0xA56A, 0xB54B, 0x8528, 0x9509, 0xE5EE, 0xF5CF, 0xC5AC, 0xD58D,
|
||||
0x3653, 0x2672, 0x1611, 0x0630, 0x76D7, 0x66F6, 0x5695, 0x46B4,
|
||||
0xB75B, 0xA77A, 0x9719, 0x8738, 0xF7DF, 0xE7FE, 0xD79D, 0xC7BC,
|
||||
0x48C4, 0x58E5, 0x6886, 0x78A7, 0x0840, 0x1861, 0x2802, 0x3823,
|
||||
0xC9CC, 0xD9ED, 0xE98E, 0xF9AF, 0x8948, 0x9969, 0xA90A, 0xB92B,
|
||||
0x5AF5, 0x4AD4, 0x7AB7, 0x6A96, 0x1A71, 0x0A50, 0x3A33, 0x2A12,
|
||||
0xDBFD, 0xCBDC, 0xFBBF, 0xEB9E, 0x9B79, 0x8B58, 0xBB3B, 0xAB1A,
|
||||
0x6CA6, 0x7C87, 0x4CE4, 0x5CC5, 0x2C22, 0x3C03, 0x0C60, 0x1C41,
|
||||
0xEDAE, 0xFD8F, 0xCDEC, 0xDDCD, 0xAD2A, 0xBD0B, 0x8D68, 0x9D49,
|
||||
0x7E97, 0x6EB6, 0x5ED5, 0x4EF4, 0x3E13, 0x2E32, 0x1E51, 0x0E70,
|
||||
0xFF9F, 0xEFBE, 0xDFDD, 0xCFFC, 0xBF1B, 0xAF3A, 0x9F59, 0x8F78,
|
||||
0x9188, 0x81A9, 0xB1CA, 0xA1EB, 0xD10C, 0xC12D, 0xF14E, 0xE16F,
|
||||
0x1080, 0x00A1, 0x30C2, 0x20E3, 0x5004, 0x4025, 0x7046, 0x6067,
|
||||
0x83B9, 0x9398, 0xA3FB, 0xB3DA, 0xC33D, 0xD31C, 0xE37F, 0xF35E,
|
||||
0x02B1, 0x1290, 0x22F3, 0x32D2, 0x4235, 0x5214, 0x6277, 0x7256,
|
||||
0xB5EA, 0xA5CB, 0x95A8, 0x8589, 0xF56E, 0xE54F, 0xD52C, 0xC50D,
|
||||
0x34E2, 0x24C3, 0x14A0, 0x0481, 0x7466, 0x6447, 0x5424, 0x4405,
|
||||
0xA7DB, 0xB7FA, 0x8799, 0x97B8, 0xE75F, 0xF77E, 0xC71D, 0xD73C,
|
||||
0x26D3, 0x36F2, 0x0691, 0x16B0, 0x6657, 0x7676, 0x4615, 0x5634,
|
||||
0xD94C, 0xC96D, 0xF90E, 0xE92F, 0x99C8, 0x89E9, 0xB98A, 0xA9AB,
|
||||
0x5844, 0x4865, 0x7806, 0x6827, 0x18C0, 0x08E1, 0x3882, 0x28A3,
|
||||
0xCB7D, 0xDB5C, 0xEB3F, 0xFB1E, 0x8BF9, 0x9BD8, 0xABBB, 0xBB9A,
|
||||
0x4A75, 0x5A54, 0x6A37, 0x7A16, 0x0AF1, 0x1AD0, 0x2AB3, 0x3A92,
|
||||
0xFD2E, 0xED0F, 0xDD6C, 0xCD4D, 0xBDAA, 0xAD8B, 0x9DE8, 0x8DC9,
|
||||
0x7C26, 0x6C07, 0x5C64, 0x4C45, 0x3CA2, 0x2C83, 0x1CE0, 0x0CC1,
|
||||
0xEF1F, 0xFF3E, 0xCF5D, 0xDF7C, 0xAF9B, 0xBFBA, 0x8FD9, 0x9FF8,
|
||||
0x6E17, 0x7E36, 0x4E55, 0x5E74, 0x2E93, 0x3EB2, 0x0ED1, 0x1EF0
|
||||
};
|
||||
uint16_t CRC16_Table(uint8_t* p, uint8_t counter)
|
||||
{
|
||||
uint16_t crc16 = 0;
|
||||
for (int i = 0; i < counter; i++)
|
||||
{
|
||||
uint8_t value = p[i];
|
||||
crc16 = CRC16Table[((crc16 >> 8) ^ value) & 0xff] ^ (crc16 << 8);
|
||||
}
|
||||
return (crc16);
|
||||
}
|
||||
```
|
||||
|
||||
CRC16 校验程序调用举例:
|
||||
|
||||
```c
|
||||
uint16_t CRC16 = CRC16_Table(payload, length);
|
||||
```
|
||||
|
||||
## AN数据帧定义与自定义CAN_ID
|
||||
|
||||
打开 FDIGroundStation 上位机,连接设备后将 COMM 板块的 CAN 数据输出口设置为 **NAV** 选项后,用户即可通过CAN获取数据,输出数据帧定义与FDILink协议一致,如下表所示。
|
||||
|
||||
| | 帧头 | 帧头 | 帧头 | 帧头 | 帧头 | 数据区 | 数据区 | 帧尾 |
|
||||
|--- |--- |--- |--- |--- |--- |--- |--- |--- |
|
||||
| | 起始 | 指令类别 | 数据长度 | 流水序号 | 帧头CRC8 | 数据CRC16 | 载荷 | 结束 |
|
||||
| 字节数 | 1 | 1 | 1 | 1 | 1 | 2 | 1-255 | 1 |
|
||||
| 数值 | 0xFC | **A** | **B** | **C** | **D** | 高字节(E), 低字节(E) || 0xFD |
|
||||
91
docs/RefreeSys/packet.md
Normal file
91
docs/RefreeSys/packet.md
Normal file
@@ -0,0 +1,91 @@
|
||||
# RoboMaster 2026 机甲大师高校系列赛通信协议
|
||||
|
||||
**版本**: V1.2.0
|
||||
**发布日期**: 2026年02月
|
||||
|
||||
---
|
||||
|
||||
## 1. 串口协议
|
||||
|
||||
### 1.1 串口协议格式
|
||||
|
||||
通信方式为串口,配置为:
|
||||
- **常规链路波特率**: 115200
|
||||
- **图传链路波特率**: 921600
|
||||
- **数据位**: 8位
|
||||
- **停止位**: 1位
|
||||
- **硬件流控**: 无
|
||||
- **校验位**: 无
|
||||
|
||||
#### 表 1-1 通信协议格式
|
||||
|
||||
| 字段 | 长度 | 说明 |
|
||||
|:---|:---:|:---|
|
||||
| frame_header | 5-byte | 帧头 |
|
||||
| cmd_id | 2-byte | 命令码 |
|
||||
| data | n-byte | 数据 |
|
||||
| frame_tail | 2-byte | CRC16 整包校验 |
|
||||
|
||||
#### 表 1-2 frame_header 格式
|
||||
|
||||
| 字段 | 长度 | 说明 |
|
||||
|:---|:---:|:---|
|
||||
| SOF | 1-byte | 起始字节 |
|
||||
| data_length | 2-byte | 数据长度 |
|
||||
| seq | 1-byte | 包序号 |
|
||||
| CRC8 | 1-byte | 帧头 CRC8 校验 |
|
||||
|
||||
#### 表 1-3 帧头详细定义
|
||||
|
||||
| 域 | 偏移位置 | 大小(字节) | 详细描述 |
|
||||
|:---|:---:|:---:|:---|
|
||||
| SOF | 0 | 1 | 数据帧起始字节,固定值为 0xA5 |
|
||||
| data_length | 1 | 2 | 数据帧中 data 的长度 |
|
||||
| seq | 3 | 1 | 包序号 |
|
||||
| CRC8 | 4 | 1 | 帧头 CRC8 校验 |
|
||||
|
||||
> **数据链路说明**: 裁判系统串口数据链路有三种:**常规链路**、**图传链路**、**雷达无线链路**。
|
||||
|
||||
---
|
||||
|
||||
### 1.2 命令码 ID 和常规链路数据说明
|
||||
|
||||
#### 表 1-4 命令码 ID 一览
|
||||
|
||||
| 命令码 | 数据段长度 | 说明 | 发送方/接收方 | 所属数据链路 |
|
||||
|:---|:---:|:---|:---|:---:|
|
||||
| 0x0001 | 11 | 比赛状态数据,固定以 1Hz 频率发送 | 服务器→全体机器人 | 常规链路 |
|
||||
| 0x0002 | 1 | 比赛结果数据,比赛结束触发发送 | 服务器→全体机器人 | 常规链路 |
|
||||
| 0x0003 | 16 | 机器人血量数据,固定以 3Hz 频率发送 | 服务器→全体机器人 | 常规链路 |
|
||||
| 0x0101 | 4 | 场地事件数据,固定以 1Hz 频率发送 | 服务器→己方全体机器人 | 常规链路 |
|
||||
| 0x0104 | 3 | 裁判警告数据,己方判罚/判负时触发发送,其余时间以 1Hz 频率发送 | 服务器→被判罚方全体机器人 | 常规链路 |
|
||||
| 0x0105 | 3 | 飞镖发射相关数据,固定以 1Hz 频率发送 | 服务器→己方全体机器人 | 常规链路 |
|
||||
| 0x0201 | 13 | 机器人性能体系数据,固定以 10Hz 频率发送 | 主控模块→对应机器人 | 常规链路 |
|
||||
| 0x0202 | 14 | 实时底盘缓冲能量和射击热量数据,固定以 10Hz 频率发送 | 主控模块→对应机器人 | 常规链路 |
|
||||
| 0x0203 | 16 | 机器人位置数据,固定以 1Hz 频率发送 | 主控模块→对应机器人 | 常规链路 |
|
||||
| 0x0204 | 8 | 机器人增益和底盘能量数据,固定以 3Hz 频率发送 | 服务器→对应机器人 | 常规链路 |
|
||||
| 0x0206 | 1 | 伤害状态数据,伤害发生后发送 | 主控模块→对应机器人 | 常规链路 |
|
||||
| 0x0207 | 7 | 实时射击数据,弹丸发射后发送 | 主控模块→对应机器人 | 常规链路 |
|
||||
| 0x0208 | 6 | 允许发弹量,固定以 10Hz 频率发送 | 服务器→己方英雄、步兵、哨兵、空中机器人 | 常规链路 |
|
||||
| 0x0209 | 5 | 机器人 RFID 模块状态,固定以 3Hz 频率发送 | 服务器→己方装有 RFID 模块的机器人 | 常规链路 |
|
||||
| 0x020A | 6 | 飞镖选手端指令数据,固定以 3Hz 频率发送 | 服务器→己方飞镖机器人 | 常规链路 |
|
||||
| 0x020B | 40 | 地面机器人位置数据,固定以 1Hz 频率发送 | 服务器→己方哨兵机器人 | 常规链路 |
|
||||
| 0x020C | 2 | 雷达标记进度数据,固定以 1Hz 频率发送 | 服务器→己方雷达机器人 | 常规链路 |
|
||||
| 0x020D | 6 | 哨兵自主决策信息同步,固定以 1Hz 频率发送 | 服务器→己方哨兵机器人 | 常规链路 |
|
||||
| 0x020E | 1 | 雷达自主决策信息同步,固定以 1Hz 频率发送 | 服务器→己方雷达机器人 | 常规链路 |
|
||||
| 0x0301 | 118 | 机器人交互数据,发送方触发发送,频率上限为 30Hz | - | 常规链路 |
|
||||
| 0x0302 | 30 | 自定义控制器与机器人交互数据,发送方触发发送,频率上限为 30Hz | 自定义控制器→选手端图传连接的机器人 | 图传链路 |
|
||||
| 0x0303 | 15 | 选手端小地图交互数据,选手端触发发送 | 选手端点击→服务器→发送方选择的己方机器人 | 常规链路 |
|
||||
| 0x0305 | 24 | 选手端小地图接收雷达数据,频率上限为 5Hz | 雷达→服务器→己方所有选手端 | 常规链路 |
|
||||
| 0x0306 | 8 | 自定义控制器与选手端交互数据,发送方触发发送,频率上限为 30Hz | 自定义控制器→选手端 | - |
|
||||
| 0x0307 | 103 | 选手端小地图接收路径数据,频率上限为 1Hz | 哨兵/半自动控制机器人→对应操作手选手端 | 常规链路 |
|
||||
| 0x0308 | 34 | 选手端小地图接收机器人数据,频率上限为 3Hz | 己方机器人→己方选手端 | 常规链路 |
|
||||
| 0x0309 | 30 | 自定义控制器接收机器人数据,频率上限为 10Hz | 己方机器人→对应操作手选手端连接的自定义控制器 | 图传链路 |
|
||||
| 0x0310 | 300 | 机器人发送给自定义客户端的数据,频率上限为 50Hz | 己方机器人→图传链路→对应操作手选手端连接的自定义客户端 | 图传链路 |
|
||||
| 0x0311 | 30 | 自定义客户端发送给机器人的自定义指令,频率上限为 75Hz | 对应操作手选手端连接的自定义客户端→图传链路→己方机器人 | 图传链路 |
|
||||
| 0x0A01 | 24 | 对方机器人的位置坐标,频率上限为 10Hz | 信号发射源→雷达 | 雷达无线链路 |
|
||||
| 0x0A02 | 12 | 对方机器人的血量信息,频率上限为 10Hz | 信号发射源→雷达 | 雷达无线链路 |
|
||||
| 0x0A03 | 10 | 对方机器人的剩余发弹量信息,频率上限为 10Hz | 信号发射源→雷达 | 雷达无线链路 |
|
||||
| 0x0A04 | 8 | 对方队伍的宏观状态信息,频率上限为 10Hz | 信号发射源→雷达 | 雷达无线链路 |
|
||||
| 0x0A05 | 36 | 对方各机器人当前增益效果,频率上限为 10Hz | 信号发射源→雷达 | 雷达无线链路 |
|
||||
| 0x0A06 | 6 | 对方干扰波密钥,频率上限为 10Hz | 信号发射源→雷达 | 雷达无线链路 |
|
||||
27
docs/Transmit/ctrl_command.md
Normal file
27
docs/Transmit/ctrl_command.md
Normal file
@@ -0,0 +1,27 @@
|
||||
# 控制指令的发送说明
|
||||
|
||||
在主机外接收的控制板中的控制代码的实现是:
|
||||
|
||||
```c
|
||||
// CAN 速率 1000kbps
|
||||
void CToC_CANDataProcess(unit32_t ID, uint8_t *Data)
|
||||
{
|
||||
// 以下所有变量有效范围为 [-660,660]
|
||||
if(ID == 0x149) // 运动控制
|
||||
{
|
||||
|
||||
Remote_RxData.Remote_R_RL =(int16_t)((uint16_t)Data[0]<<8 | Data[1]); // 平动 X 轴(左右)
|
||||
Remote_RxData.Remote_R_UD =(int16_t)((uint16_t)Data[2]<<8 | Data[3]); // 平动 Y 轴(前后)
|
||||
Remote_RxData.Remote_L_RL =(int16_t)((uint16_t)Data[4]<<8 | Data[5]); // 云台偏航 (左右)
|
||||
Remote_RxData.Remote_L_UD =(int16_t)((uint16_t)Data[6]<<8 | Data[7]); // 云台俯仰 (上下)
|
||||
}
|
||||
else if(ID == 0x189) // 攻击控制
|
||||
{
|
||||
Remote_RxData.Remote_ThumbWheel =(int16_t)((uint16_t)Data[0]<<8 | Data[1]); // 拨弹盘(进弹/退弹),660 为进弹,0 为关闭,-660 为退弹
|
||||
Remote_RxData.Remote_RS =(int16_t)((uint16_t)Data[2]<<8 | Data[3]); // 小陀螺(反自瞄)开关,置 660 为开启,0 为关闭
|
||||
Remote_RxData.Remote_LS =(int16_t)((uint16_t)Data[4]<<8 | Data[5]); // 摩擦轮开关, 置 660 为开启,0 为关闭
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
两个 ID 分别是云台和底盘的控制板,在处于进点/回家状态时不应开启小陀螺,发射弹丸需要**打开摩擦轮 同时 进弹**,因此只有在处于攻击状态时开启摩擦轮,此时可以将进弹视为扳机。
|
||||
Reference in New Issue
Block a user