增加手动,以及ai识别
This commit is contained in:
@@ -249,7 +249,7 @@ typedef union _UnRemoteControlInput
|
||||
// 定义接收数据结构体
|
||||
typedef struct {
|
||||
uint8_t data[MAX_RECEIVED_DATA_SIZE];
|
||||
uint16_t length;
|
||||
uint32_t length;
|
||||
} ReceivedDataStruct;
|
||||
|
||||
|
||||
@@ -680,6 +680,100 @@ typedef union _UnrLifterOutput
|
||||
} UnLifterOutput;
|
||||
|
||||
|
||||
// CAN ID 解析(联合体形式,支持位域和32位直接访问)
|
||||
typedef union _UnCanIdInfo
|
||||
{
|
||||
uint32_t raw; // 32位整型,直接读写整个CAN ID
|
||||
struct
|
||||
{
|
||||
uint32_t motor_id : 8; // 0-7 bit (电机ID)
|
||||
uint32_t data : 16; // 8-23 bit (数据字段)
|
||||
uint32_t mode : 5; // 24-28 bit (模式)
|
||||
uint32_t res : 3; // 29-31 bit (保留位)
|
||||
} bits;
|
||||
|
||||
} UnCanIdInfo;
|
||||
|
||||
|
||||
// 输出can数据
|
||||
typedef struct _StrTxCanOutput
|
||||
{
|
||||
uint16_t index; // 索引(类似寄存器地址)
|
||||
uint16_t object_index; // 子索引(通常为0x0000)
|
||||
uint32_t data; // 数据字段
|
||||
} StrTxCanOutput;
|
||||
|
||||
|
||||
// CAN数据区联合体 (8字节,严格遵循图片协议,大端序数据)
|
||||
typedef union _UnTxCanData {
|
||||
StrTxCanOutput bit_data; // 结构化访问
|
||||
uint8_t arr[sizeof(StrTxCanOutput)]; // 字节数组形式(用于原始数据读写)
|
||||
} UnTxCanData;
|
||||
|
||||
|
||||
// 接收CAN帧结构体
|
||||
typedef struct _StrTxCanFrame
|
||||
{
|
||||
UnCanIdInfo tx_can_id; // 接收到的29位CAN ID
|
||||
UnTxCanData tx_can_data; // 接收到的8字节数据区
|
||||
} StrTxCanFrame;
|
||||
|
||||
|
||||
|
||||
// CAN ID 解析联合体 (29位扩展帧,严格遵循图片协议,小端序适配)
|
||||
typedef union _UnRxCanIdInfo {
|
||||
uint32_t raw; // 完整的32位值
|
||||
|
||||
struct {
|
||||
// 注意:小端序下,位域布局从低位到高位(Bit0到Bit31)
|
||||
// 编译器通常从低位开始分配位域
|
||||
|
||||
// 主机CAN_ID (Bit7~Bit0) - 8位 - 最低字节
|
||||
uint32_t host_id : 8; // Bit7~0: 主机CAN_ID
|
||||
|
||||
// 电机状态与故障信息域 (Bit23~Bit8) - 16位
|
||||
uint32_t motor_can_id : 8; // Bit15~8: 当前电机CAN ID
|
||||
uint32_t undervoltage : 1; // Bit16: 欠压故障 (0无1有)
|
||||
uint32_t overcurrent : 1; // Bit17: 过流 (0无1有)
|
||||
uint32_t overtemperature : 1; // Bit18: 过温 (0无1有)
|
||||
uint32_t mag_encoder_fault : 1; // Bit19: 磁编码故障 (0无1有)
|
||||
uint32_t hall_fault : 1; // Bit20: HALL编码故障 (0无1有)
|
||||
uint32_t uncalibrated : 1; // Bit21: 未标定 (0无1有)
|
||||
uint32_t mode_state : 2; // Bit23~22: 模式状态 (0:Reset,1:Cali,2:Motor)
|
||||
|
||||
// 协议标识 (Bit28~Bit24) - 5位
|
||||
uint32_t protocol_id : 5; // Bit28~24: 协议标识(图中为2)
|
||||
|
||||
// 保留位 (Bit31~29) - 3位(图片中未使用)
|
||||
uint32_t reserved : 3; // Bit31~29: 保留位,应设置为0
|
||||
} bits;
|
||||
} UnRxCanIdInfo;
|
||||
|
||||
// 输出can数据
|
||||
typedef struct _StrRxCanOutput
|
||||
{
|
||||
uint16_t current_angle; // Byte0~1: 当前角度 [0~65535]对应(-4π~4π)
|
||||
uint16_t current_velocity; // Byte2~3: 当前角速度 [0~65535]对应(-15rad/s~15rad/s)
|
||||
uint16_t current_torque; // Byte4~5: 当前力矩 [0~65535]对应(-120Nm~120Nm)
|
||||
uint16_t temperature; // Byte6~7: 当前温度: Temp(摄氏度)*10
|
||||
} StrRxCanOutput;
|
||||
|
||||
// CAN数据区联合体 (8字节,严格遵循图片协议,大端序数据)
|
||||
typedef union _UnRxCanData
|
||||
{
|
||||
StrRxCanOutput bit_data; // 结构化访问
|
||||
uint8_t arr[sizeof(StrRxCanOutput)]; // 字节数组形式(用于原始数据读写)
|
||||
} UnRxCanData;
|
||||
|
||||
// 接收CAN帧结构体
|
||||
typedef struct _StrRxCanFrame
|
||||
{
|
||||
UnRxCanIdInfo rx_can_id; // 接收到的29位CAN ID
|
||||
UnRxCanData rx_can_data; // 接收到的8字节数据区
|
||||
} StrRxCanFrame;
|
||||
|
||||
|
||||
|
||||
//-----以太网-------------------------------------------------------------
|
||||
// 输出给自主计算机
|
||||
typedef struct _StrComputerOutput
|
||||
@@ -912,7 +1006,174 @@ typedef union _UnAutoControlOutput
|
||||
|
||||
|
||||
|
||||
/* 云台数据流请求完整通信帧结构体 - CMD_ID 0x25 */
|
||||
#pragma pack(push, 1)
|
||||
typedef struct {
|
||||
uint16_t STX; // 帧起始标志,固定为0x6655(低字节在前,实际存储为0x55 0x66)
|
||||
uint8_t CTRL; // 控制位:bit0-need_ack(是否需要ack) bit1-ack_pack(是否为ack包) bit2-7-预留
|
||||
uint16_t Data_len; // 数据域字节长度(低字节在前),此处固定为2
|
||||
uint16_t SEQ; // 帧序列(0~65535),低字节在前
|
||||
uint8_t CMD_ID; // 命令ID,此处固定为0x25
|
||||
// 以下为DATA域(对应偏移8开始,长度=Data_len=2)
|
||||
uint8_t data_type; // 数据类型:1-姿态 2-激光测距 3-磁编码角度 4-电机电压
|
||||
uint8_t data_freq; // 输出频率:0-关闭 1-2Hz 2-4Hz 3-5Hz 4-10Hz 5-20Hz 6-50Hz 7-100Hz
|
||||
uint16_t CRC16; // 整个数据包的CRC16校验(低字节在前)
|
||||
} GimbalStreamRequestFrame;
|
||||
#pragma pack(pop)
|
||||
|
||||
/* 云台数据流请求完整通信帧联合体 - CMD_ID 0x25 */
|
||||
typedef union {
|
||||
GimbalStreamRequestFrame frame; // 按结构体访问各字段
|
||||
uint8_t data[12]; // 按字节数组访问(总长度:2+1+2+2+1+2+2 = 12字节)
|
||||
} GimbalStreamRequestFrameUnion;
|
||||
|
||||
|
||||
/* 手动变倍自动对焦数据结构体 - CMD_ID 0x05 */
|
||||
#pragma pack(push, 1)
|
||||
typedef struct {
|
||||
uint16_t STX; // 帧起始标志,固定为0x6655(低字节在前,实际存储为0x55 0x66)
|
||||
uint8_t CTRL; // 控制位:bit0-need_ack(是否需要ack) bit1-ack_pack(是否为ack包) bit2-7-预留
|
||||
uint16_t Data_len; // 数据域字节长度(低字节在前),此处固定为1
|
||||
uint16_t SEQ; // 帧序列(0~65535),低字节在前
|
||||
uint8_t CMD_ID; // 命令ID,此处固定为0x05
|
||||
// 以下为DATA域(对应偏移8开始,长度=Data_len=1)
|
||||
int8_t zoom; // 变倍控制:1-放大 0-停止缩放(松手后发送) -1-缩小
|
||||
uint16_t CRC16; // 整个数据包的CRC16校验(低字节在前)
|
||||
} ManualZoomFocusFrame;
|
||||
#pragma pack(pop)
|
||||
|
||||
/* 手动变倍自动对焦完整通信帧联合体 - CMD_ID 0x05 */
|
||||
typedef union {
|
||||
ManualZoomFocusFrame frame; // 按结构体访问各字段
|
||||
uint8_t data[11]; // 按字节数组访问(总长度:2+1+2+2+1+1+2 = 11字节)
|
||||
} ManualZoomFocusFrameUnion;
|
||||
|
||||
/* 拍照录像控制数据结构体 - CMD_ID 0x0C */
|
||||
#pragma pack(push, 1)
|
||||
typedef struct {
|
||||
uint16_t STX; // 帧起始标志,固定为0x6655(低字节在前,实际存储为0x55 0x66)
|
||||
uint8_t CTRL; // 控制位:bit0-need_ack(是否需要ack) bit1-ack_pack(是否为ack包) bit2-7-预留
|
||||
uint16_t Data_len; // 数据域字节长度(低字节在前),此处固定为1
|
||||
uint16_t SEQ; // 帧序列(0~65535),低字节在前
|
||||
uint8_t CMD_ID; // 命令ID,此处固定为0x0C
|
||||
// 以下为DATA域(对应偏移8开始,长度=Data_len=1)
|
||||
uint8_t func_type; // 功能类型: 0-拍照 2-录像 3-5-运动模式 10-联动变倍等
|
||||
uint16_t CRC16; // 整个数据包的CRC16校验(低字节在前)
|
||||
} PhotoVideoControlFrame;
|
||||
#pragma pack(pop)
|
||||
|
||||
/* 拍照录像控制完整通信帧联合体 - CMD_ID 0x0C */
|
||||
typedef union {
|
||||
PhotoVideoControlFrame frame; // 按结构体访问各字段
|
||||
uint8_t data[11]; // 按字节数组访问(总长度:2+1+2+2+1+1+2 = 11字节)
|
||||
} PhotoVideoControlFrameUnion;
|
||||
|
||||
/* 设置激光测距状态数据结构体 - CMD_ID 0x32 */
|
||||
#pragma pack(push, 1)
|
||||
typedef struct {
|
||||
uint16_t STX; // 帧起始标志,固定为0x6655(低字节在前,实际存储为0x55 0x66)
|
||||
uint8_t CTRL; // 控制位:bit0-need_ack(是否需要ack) bit1-ack_pack(是否为ack包) bit2-7-预留
|
||||
uint16_t Data_len; // 数据域字节长度(低字节在前),此处固定为1
|
||||
uint16_t SEQ; // 帧序列(0~65535),低字节在前
|
||||
uint8_t CMD_ID; // 命令ID,此处固定为0x32
|
||||
// 以下为DATA域(对应偏移8开始,长度=Data_len=1)
|
||||
uint8_t laser_state; // 激光测距状态:1-开启 0-关闭
|
||||
uint16_t CRC16; // 整个数据包的CRC16校验(低字节在前)
|
||||
} SetLaserRangingStatusFrame;
|
||||
#pragma pack(pop)
|
||||
|
||||
/* 设置激光测距状态完整通信帧联合体 - CMD_ID 0x32 */
|
||||
typedef union {
|
||||
SetLaserRangingStatusFrame frame; // 按结构体访问各字段
|
||||
uint8_t data[11]; // 按字节数组访问(总长度:2+1+2+2+1+1+2 = 11字节)
|
||||
} SetLaserRangingStatusFrameUnion;
|
||||
|
||||
/* 设置AI追踪目标坐标信息流状态数据结构体 - CMD_ID 0x51 */
|
||||
#pragma pack(push, 1)
|
||||
typedef struct {
|
||||
uint16_t STX; // 帧起始标志,固定为0x6655(低字节在前,实际存储为0x55 0x66)
|
||||
uint8_t CTRL; // 控制位:bit0-need_ack(是否需要ack) bit1-ack_pack(是否为ack包) bit2-7-预留
|
||||
uint16_t Data_len; // 数据域字节长度(低字节在前),此处固定为1
|
||||
uint16_t SEQ; // 帧序列(0~65535),低字节在前
|
||||
uint8_t CMD_ID; // 命令ID,此处固定为0x51
|
||||
// 以下为DATA域(对应偏移8开始,长度=Data_len=1)
|
||||
uint8_t track_action; // AI追踪目标坐标信息流状态:1-打开输出 0-关闭输出
|
||||
uint16_t CRC16; // 整个数据包的CRC16校验(低字节在前)
|
||||
} SetAiTrackTargetCoordinateStatusFrame;
|
||||
#pragma pack(pop)
|
||||
|
||||
/* 设置AI追踪目标坐标信息流状态完整通信帧联合体 - CMD_ID 0x51 */
|
||||
typedef union {
|
||||
SetAiTrackTargetCoordinateStatusFrame frame; // 按结构体访问各字段
|
||||
uint8_t data[11]; // 按字节数组访问(总长度:2+1+2+2+1+1+2 = 11字节)
|
||||
} SetAiTrackTargetCoordinateUnion;
|
||||
|
||||
/* 设置AI追踪模式数据结构体 - CMD_ID 0x55 */
|
||||
#pragma pack(push, 1)
|
||||
typedef struct {
|
||||
uint16_t STX; // 帧起始标志,固定为0x6655(低字节在前,实际存储为0x55 0x66)
|
||||
uint8_t CTRL; // 控制位:bit0-need_ack(是否需要ack) bit1-ack_pack(是否为ack包) bit2-7-预留
|
||||
uint16_t Data_len; // 数据域字节长度(低字节在前),此处固定为1
|
||||
uint16_t SEQ; // 帧序列(0~65535),低字节在前
|
||||
uint8_t CMD_ID; // 命令ID,此处固定为0x55
|
||||
// 以下为DATA域(对应偏移8开始,长度=Data_len=1)
|
||||
uint8_t Ai_mode; // AI追踪模式:0-关闭 1-开启
|
||||
uint16_t CRC16; // 整个数据包的CRC16校验(低字节在前)
|
||||
} SetAiTrackingModeFrame;
|
||||
#pragma pack(pop)
|
||||
|
||||
|
||||
/* 设置AI追踪目标坐标信息流状态完整通信帧联合体 - CMD_ID 0x55 */
|
||||
typedef union {
|
||||
SetAiTrackingModeFrame frame; // 按结构体访问各字段
|
||||
uint8_t data[11]; // 按字节数组访问(总长度:2+1+2+2+1+1+2 = 11字节)
|
||||
} SetAiTrackingModeFrameUnion;
|
||||
|
||||
|
||||
|
||||
/* 请求当前云台模式数据结构体 - CMD_ID 0x19 */
|
||||
#pragma pack(push, 1)
|
||||
typedef struct {
|
||||
uint16_t STX; // 帧起始标志,固定为0x6655(低字节在前,实际存储为0x55 0x66)
|
||||
uint8_t CTRL; // 控制位:bit0-need_ack(是否需要ack) bit1-ack_pack(是否为ack包) bit2-7-预留
|
||||
uint16_t Data_len; // 数据域字节长度(低字节在前),此处固定为0(无数据域)
|
||||
uint16_t SEQ; // 帧序列(0~65535),低字节在前
|
||||
uint8_t CMD_ID; // 命令ID,此处固定为0x19
|
||||
// 以下为DATA域(对应偏移8开始,长度=Data_len=0,无数据)
|
||||
uint16_t CRC16; // 整个数据包的CRC16校验(低字节在前)
|
||||
} RequestCurrentPodModeFrame;
|
||||
#pragma pack(pop)
|
||||
|
||||
/* 请求当前云台模式完整通信帧联合体 - CMD_ID 0x19 */
|
||||
typedef union {
|
||||
RequestCurrentPodModeFrame frame; // 按结构体访问各字段
|
||||
uint8_t data[10]; // 按字节数组访问(总长度:2+1+2+2+1+0+2 = 10字节)
|
||||
} RequestCurrentPodModeFrameUnion;
|
||||
|
||||
|
||||
/* 设置AI选择追踪目标数据结构体 - CMD_ID 0x56 */
|
||||
#pragma pack(push, 1)
|
||||
typedef struct {
|
||||
uint16_t STX; // 帧起始标志,固定为0x6655(低字节在前,实际存储为0x55 0x66)
|
||||
uint8_t CTRL; // 控制位:bit0-need_ack(是否需要ack) bit1-ack_pack(是否为ack包) bit2-7-预留
|
||||
uint16_t Data_len; // 数据域字节长度(低字节在前),此处固定为9
|
||||
uint16_t SEQ; // 帧序列(0~65535),低字节在前
|
||||
uint8_t CMD_ID; // 命令ID,此处固定为0x51
|
||||
// 以下为DATA域(对应偏移8开始,长度=Data_len=9)
|
||||
uint8_t track_action; // 追踪动作:1-追踪目标 0-取消追踪
|
||||
uint16_t touch_lx; // 点选:x坐标,范围为视频流分辨率的宽大小;框选:方框左上顶点x坐标
|
||||
uint16_t touch_ly; // 点选:y坐标,范围为视频流分辨率的高大小;框选:方框左上顶点y坐标
|
||||
uint16_t touch_rx; // 点选:0;框选:方框右下顶点x坐标
|
||||
uint16_t touch_ry; // 点选:0;框选:方框右下顶点y坐标
|
||||
uint16_t CRC16; // 整个数据包的CRC16校验(低字节在前)
|
||||
} SetAiSelectTrackingTargetFrame;
|
||||
#pragma pack(pop)
|
||||
|
||||
/* 设置AI选择追踪目标完整通信帧联合体 - CMD_ID 0x51 */
|
||||
typedef union {
|
||||
SetAiSelectTrackingTargetFrame frame; // 按结构体访问各字段
|
||||
uint8_t data[19]; // 按字节数组访问(总长度:2+1+2+2+1+1+2+2+2+2+2 = 19字节)
|
||||
} SetAiSelectTrackingTargetUnion;
|
||||
|
||||
//-----IO口---------------------------------------------------------------
|
||||
// 电压信号输出,到遥控器
|
||||
@@ -990,9 +1251,28 @@ extern UnSdoOutput un_sdo_output ;//转向电机输出
|
||||
extern uint8_t test_app[26];
|
||||
|
||||
extern ReceivedDataStruct mt11_received_data;
|
||||
extern ReceivedDataStruct mt11_tx_data;
|
||||
|
||||
|
||||
extern UnCanDebugOutput un_can_debug_output;//调试输出
|
||||
|
||||
//转台
|
||||
extern GimbalStreamRequestFrameUnion gimbal_stream_request_output;//请求云台数据流
|
||||
extern PhotoVideoControlFrameUnion photo_video_control_output ;//设置FPV模式
|
||||
extern SetAiTrackingModeFrameUnion ai_track_mode_output ;//追踪模式
|
||||
extern SetAiTrackTargetCoordinateUnion ai_track_coordinate_output ;//ai追踪信息流
|
||||
|
||||
extern RequestCurrentPodModeFrameUnion request_pod_mode_output ;//请求云台状态
|
||||
extern SetAiSelectTrackingTargetUnion ai_select_track_target_output ;//设置ai追踪目标
|
||||
|
||||
|
||||
|
||||
extern StrTxCanFrame un_sdo_output1 ;//电机1输出
|
||||
extern StrTxCanFrame un_sdo_output2 ;//电机2输出
|
||||
extern StrTxCanFrame un_sdo_output3 ;//电机3输出
|
||||
extern StrTxCanFrame un_sdo_output4 ;//电机4输出
|
||||
extern StrTxCanFrame un_sdo_output5 ;//电机5输出
|
||||
|
||||
|
||||
//函数
|
||||
void canSendAll(void *signal_id);
|
||||
|
||||
Reference in New Issue
Block a user