127 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			127 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /**
 | ||
|  * @file go_protocol.h
 | ||
|  * @brief GO-M8010-6关节电机驱动 通讯协议&数据包
 | ||
|  * @version 0.1
 | ||
|  * @date 2022-03-04
 | ||
|  *
 | ||
|  * @copyright Copyright (c) unitree robotics .co.ltd. 2022
 | ||
|  */
 | ||
| 
 | ||
| #ifndef __GO_PROTOCOL_H
 | ||
| #define __GO_PROTOCOL_H
 | ||
| 
 | ||
| #include "crc_ccitt.h"
 | ||
| 
 | ||
| #pragma pack(1)
 | ||
| /**
 | ||
|  * @brief 电机模式控制信息
 | ||
|  *
 | ||
|  */
 | ||
| typedef struct
 | ||
| {
 | ||
|     uint8_t id : 4;      // 电机ID: 0,1...,13,14 15表示向所有电机广播数据(此时无返回)
 | ||
|     uint8_t status : 3;  // 工作模式: 0.锁定 1.FOC闭环 2.编码器校准 3.保留
 | ||
|     uint8_t reserve : 1; // 保留位
 | ||
| } RIS_Mode_t;            // 控制模式 1Byte
 | ||
| 
 | ||
| /**
 | ||
|  * @brief 电机状态控制信息
 | ||
|  *
 | ||
|  */
 | ||
| typedef struct
 | ||
| {
 | ||
|     int16_t tor_des; // 期望关节输出扭矩 unit: N.m      (q8)
 | ||
|     int16_t spd_des; // 期望关节输出速度 unit: rad/s    (q8)
 | ||
|     int32_t pos_des; // 期望关节输出位置 unit: rad      (q15)
 | ||
|     int16_t k_pos;   // 期望关节刚度系数 unit: -1.0-1.0 (q15)
 | ||
|     int16_t k_spd;   // 期望关节阻尼系数 unit: -1.0-1.0 (q15)
 | ||
| 
 | ||
| } RIS_Comd_t; // 控制参数 12Byte
 | ||
| 
 | ||
| /**
 | ||
|  * @brief 电机状态反馈信息
 | ||
|  *
 | ||
|  */
 | ||
| typedef struct
 | ||
| {
 | ||
|     int16_t torque;      // 实际关节输出扭矩 unit: N.m     (q8)
 | ||
|     int16_t speed;       // 实际关节输出速度 unit: rad/s   (q8)
 | ||
|     int32_t pos;         // 实际关节输出位置 unit: rad     (q15)
 | ||
|     int8_t temp;         // 电机温度: -128~127°C
 | ||
|     uint8_t MError : 3;  // 电机错误标识: 0.正常 1.过热 2.过流 3.过压 4.编码器故障 5-7.保留
 | ||
|     uint16_t force : 12; // 足端气压传感器数据 12bit (0-4095)
 | ||
|     uint8_t none : 1;    // 保留位
 | ||
| } RIS_Fbk_t;             // 状态数据 11Byte
 | ||
| 
 | ||
| /**
 | ||
|  * @brief 控制数据包格式
 | ||
|  *
 | ||
|  */
 | ||
| typedef struct
 | ||
| {
 | ||
|     uint8_t head[2]; // 包头         2Byte
 | ||
|     RIS_Mode_t mode; // 电机控制模式  1Byte
 | ||
|     RIS_Comd_t comd; // 电机期望数据 12Byte
 | ||
|     uint16_t CRC16;  // CRC          2Byte
 | ||
| 
 | ||
| } RIS_ControlData_t; // 主机控制命令     17Byte
 | ||
| 
 | ||
| /**
 | ||
|  * @brief 电机反馈数据包格式
 | ||
|  *
 | ||
|  */
 | ||
| typedef struct
 | ||
| {
 | ||
|     uint8_t head[2]; // 包头         2Byte
 | ||
|     RIS_Mode_t mode; // 电机控制模式  1Byte
 | ||
|     RIS_Fbk_t fbk;   // 电机反馈数据 11Byte
 | ||
|     uint16_t CRC16;  // CRC          2Byte
 | ||
| 
 | ||
| } RIS_MotorData_t; // 电机返回数据     16Byte
 | ||
| 
 | ||
| #pragma pack()
 | ||
| 
 | ||
| /// @brief 电机指令结构体
 | ||
| typedef struct
 | ||
| {
 | ||
|     unsigned short id;   // 电机ID,15代表广播数据包
 | ||
|     unsigned short mode; // 0:空闲 1:FOC控制 2:电机标定
 | ||
|     float T;             // 期望关节的输出力矩(电机本身的力矩)(Nm)
 | ||
|     float W;             // 期望关节速度(电机本身的速度)(rad/s)
 | ||
|     float Pos;           // 期望关节位置(rad)
 | ||
|     float K_P;           // 关节刚度系数(0-25.599)
 | ||
|     float K_W;           // 关节速度系数(0-25.599)
 | ||
| 
 | ||
|     RIS_ControlData_t motor_send_data;
 | ||
| 
 | ||
| } MotorCmd_t;
 | ||
| 
 | ||
| /// @brief 电机反馈结构体
 | ||
| typedef struct
 | ||
| {
 | ||
|     unsigned char motor_id; // 电机ID
 | ||
|     unsigned char mode;     // 0:空闲 1:FOC控制 2:电机标定
 | ||
|     int Temp;               // 温度
 | ||
|     int MError;             // 错误码
 | ||
|     float T;                // 当前实际电机输出力矩(电机本身的力矩)(Nm)
 | ||
|     float W;                // 当前实际电机速度(电机本身的速度)(rad/s)
 | ||
|     float Pos;              // 当前电机位置(rad)
 | ||
|     int correct;            // 接收数据是否完整(1完整,0不完整)
 | ||
|     int footForce;          // 足端力传感器原始数值
 | ||
| 
 | ||
|     uint16_t calc_crc;
 | ||
|     uint32_t timeout;       // 通讯超时 数量
 | ||
|     uint32_t bad_msg;       // CRC校验错误 数量
 | ||
|     RIS_MotorData_t motor_recv_data; // 电机接收数据结构体
 | ||
| 
 | ||
| } MotorData_t;
 | ||
| 
 | ||
| void modify_data(MotorCmd_t *motor_s);
 | ||
| void extract_data(MotorData_t *motor_r);
 | ||
| 
 | ||
| #endif
 | ||
| 
 | ||
| /*
 | ||
|  * Unitree robotics (c) .Co.Ltd. 2022 All Rights Reserved.
 | ||
|  */
 |