scara_engineering/application/robot_def.h

230 lines
7.7 KiB
C
Raw Normal View History

2024-12-22 16:15:37 +08:00
/**
* @file robot_def.h
* @author NeoZeng neozng1@hnu.edu.cn
* @author Even
* @version 0.1
* @date 2022-12-02
*
* @copyright Copyright (c) HNU YueLu EC 2022 all rights reserved
*
*/
#pragma once // 可以用#pragma once代替#ifndef ROBOT_DEF_H(header guard)
#ifndef ROBOT_DEF_H
#define ROBOT_DEF_H
#include "ins_task.h"
#include "master_process.h"
#include "stdint.h"
/* 开发板类型定义,烧录时注意不要弄错对应功能;修改定义后需要重新编译,只能存在一个定义! */
#define ONE_BOARD // 单板控制整车
// #define CHASSIS_BOARD //底盘板
// #define GIMBAL_BOARD //云台板
#define VISION_USE_VCP // 使用虚拟串口发送视觉数据
// #define VISION_USE_UART // 使用串口发送视觉数据
/* 机器人重要参数定义,注意根据不同机器人进行修改,浮点数需要以.0或f结尾,无符号以u结尾 */
// 关节限位参数
#define JOINT1_MIN -90
#define JOINT1_MAX 90
#define JOINT2_MIN -90
#define JOINT2_MAX 90
#define JOINT3_MIN -90
#define JOINT3_MAX 90
#define JOINT4_MIN 2
#define JOINT4_MAX 120
#define JOINT5_MIN -90
#define JOINT5_MAX 90
#define JOINT6_MIN -90
#define JOINT6_MAX 90
// 云台参数
#define YAW_CHASSIS_ALIGN_ECD 0 // 云台和底盘对齐指向相同方向时的电机position值,若对云台有机械改动需要修改
#define YAW_ECD_GREATER_THAN_4096 1 // ALIGN_ECD值是否大于4096,是为1,否为0;用于计算云台偏转角度
#define PITCH_HORIZON_ECD 3412 // 云台处于水平位置时编码器值,若对云台有机械改动需要修改
#define PITCH_MAX_ANGLE 0 // 云台竖直方向最大角度 (注意反馈如果是陀螺仪,则填写陀螺仪的角度)
#define PITCH_MIN_ANGLE 0 // 云台竖直方向最小角度 (注意反馈如果是陀螺仪,则填写陀螺仪的角度)
#define TUCHUAN_MAX_ANGLE 180 // 图传电机最大角度
#define TUCHUAN_MIN_ANGLE 0 // 图传电机最小角度
// 发射参数
#define ONE_BULLET_DELTA_ANGLE 1933.272 // 发射一发弹丸拨盘转动的距离,由机械设计图纸给出
#define REDUCTION_RATIO_LOADER 27.0f // 拨盘电机的减速比,英雄需要修改为3508的19.0f//初始是49增加为27
#define NUM_PER_CIRCLE 5 // 拨盘一圈的装载量
// 机器人底盘修改的参数,单位为mm(毫米)
#define WHEEL_BASE 433.86 // 纵向轴距(前进后退方向)
#define TRACK_WIDTH 463.92 // 横向轮距(左右平移方向)
#define CENTER_GIMBAL_OFFSET_X 0 // 云台旋转中心距底盘几何中心的距离,前后方向,云台位于正中心时默认设为0
#define CENTER_GIMBAL_OFFSET_Y 0 // 云台旋转中心距底盘几何中心的距离,左右方向,云台位于正中心时默认设为0
#define RADIUS_WHEEL 75 // 轮子半径
#define REDUCTION_RATIO_WHEEL 19.0f // 电机减速比,因为编码器量测的是转子的速度而不是输出轴的速度故需进行转换
#define GYRO2GIMBAL_DIR_YAW 1 // 陀螺仪数据相较于云台的yaw的方向,1为相同,-1为相反
#define GYRO2GIMBAL_DIR_PITCH 1 // 陀螺仪数据相较于云台的pitch的方向,1为相同,-1为相反
#define GYRO2GIMBAL_DIR_ROLL 1 // 陀螺仪数据相较于云台的roll的方向,1为相同,-1为相反
// 检查是否出现主控板定义冲突,只允许一个开发板定义存在,否则编译会自动报错
#if (defined(ONE_BOARD) && defined(CHASSIS_BOARD)) || \
(defined(ONE_BOARD) && defined(GIMBAL_BOARD)) || \
(defined(CHASSIS_BOARD) && defined(GIMBAL_BOARD))
#error Conflict board definition! You can only define one board type.
#endif
#pragma pack(1) // 压缩结构体,取消字节对齐,下面的数据都可能被传输
/* -------------------------基本控制模式和数据类型定义-------------------------*/
/**
* @brief CMD控制数据和各应用的反馈数据的一部分
*
*/
// 机器人状态
typedef enum
{
ROBOT_STOP = 0,
ROBOT_READY,
} Robot_Status_e;
// 应用状态
typedef enum
{
APP_OFFLINE = 0,
APP_ONLINE,
APP_ERROR,
} App_Status_e;
// 底盘模式设置
/**
* @brief ,,.
*
*/
typedef enum
{
CHASSIS_ZERO_FORCE = 0, // 电流零输入
CHASSIS_ROTATE, // 小陀螺模式
CHASSIS_NO_FOLLOW, // 不跟随,允许全向平移
CHASSIS_FOLLOW_GIMBAL_YAW, // 跟随模式,底盘叠加角度环控制
} chassis_mode_e;
// 云台模式设置
typedef enum
{
GIMBAL_ZERO_FORCE = 0, // 电流零输入
GIMBAL_FREE_MODE, // 云台自由运动模式,即与底盘分离(底盘此时应为NO_FOLLOW)反馈值为电机total_angle;似乎可以改为全部用IMU数据?
ARM_MANUAL_MODE, // 云台陀螺仪反馈模式,反馈值为陀螺仪pitch,total_yaw_angle,底盘可以为小陀螺和跟随模式
GIMBAL_IKINE_MODE, // 机械臂运动学逆解模式输入6d-tof位置
GIMBAL_FLOOR_MODE, // 地矿模式
GIMBAL_SILVER_MODE, // 取银矿模式
GIMBAL_GOLD_MODE, // 取金矿模式
GIMBAL_STORAGE_MODE, // 放入矿石仓
GIMBAL_FETCH_MODE, // 取出矿石
GIMBAL_CONTROLLER_MODE, //自定义控制器模式
ADJUST_PITCH_MODE, // 调整pitch零点
} gimbal_mode_e;
//气泵模式
typedef enum
{
PUMP_STOP, //关气泵
PUMP_OPEN //开气泵
} pump_mode_e;
// 伸缩模式设置
typedef enum
{
TO_STRETCH_ZERO_FORCE = 0, // 电流零输入
TO_STRETCH_MODE, // 自由伸缩
TO_STRETCH_KEEP, // 保持不动
} to_stretch_mode_e;
/* ----------------CMD应用发布的控制数据,应当由gimbal/chassis/shoot订阅---------------- */
/**
* @brief ,pc在云台,
*
*/
// cmd发布的底盘控制数据,由chassis订阅
typedef struct
{
// 控制部分
float vx; // 前进方向速度
float vy; // 横移方向速度
float wz; // 旋转速度
float offset_angle; // 底盘和归中位置的夹角
chassis_mode_e chassis_mode;
int chassis_power_buffer;
uint16_t chassis_power_limit;
// UI部分
// ...
} Chassis_Ctrl_Cmd_s;
// cmd发布的云台控制数据,由gimbal订阅
typedef struct
{ // 云台角度控制
float joint1;
float joint2;
float joint3;
float joint4;
float joint5;
float joint6;
float x_add;
float y_add; //末端目标位置增量
float z_add;
float quat[4]; //末端姿态四元数
float rpy[3]; //末端姿态rpy角
float Controller_FeedBackAngle[5]; //自定义控制器反馈值
float chassis_rotate_wz;
uint8_t MotorEnableFlag;
uint8_t set_zero_flag;
gimbal_mode_e gimbal_mode;
} Arm_Ctrl_Cmd_s;
// cmd发布的伸缩控制数据,由to_stretch订阅
typedef struct
{
float tc;
float ud;
float fb;
to_stretch_mode_e to_stretch_mode;
} To_stretch_Ctrl_Cmd_s;
/* ----------------arm/shoot/chassis发布的反馈数据----------------*/
/**
* @brief cmd订阅,.
*
*/
typedef struct
{
#if defined(CHASSIS_BOARD) || defined(GIMBAL_BOARD) // 非单板的时候底盘还将imu数据回传(若有必要)
// attitude_t chassis_imu_data;
#endif
// 后续增加底盘的真实速度
// float real_vx;
// float real_vy;
// float real_wz;
float cap_power;
uint8_t rest_heat; // 剩余枪口热量
Enemy_Color_e enemy_color; // 0 for blue, 1 for red
} Chassis_Upload_Data_s;
typedef struct
{
float arm_feedback;
} Arm_Upload_Data_s;
typedef struct
{
float gravity_feedforward;
float protract_x; //前伸距离
float lift_z; //抬升高度
} To_stretch_Upload_Data_s;
#pragma pack() // 开启字节对齐,结束前面的#pragma pack(1)
#endif // !ROBOT_DEF_H