云台pitch pid重调

This commit is contained in:
shmily744 2024-05-14 20:40:37 +08:00
parent 26bd22000b
commit e649ca5e13
8 changed files with 35 additions and 46 deletions

View File

@ -121,7 +121,6 @@ int main(void)
MX_DAC_Init(); MX_DAC_Init();
/* USER CODE BEGIN 2 */ /* USER CODE BEGIN 2 */
HAL_Delay(1500); //delay 一段时间 等待关节电机驱动初始化
RobotInit(); // 唯一的初始化函数 RobotInit(); // 唯一的初始化函数
LOGINFO("[main] SystemInit() and RobotInit() done"); LOGINFO("[main] SystemInit() and RobotInit() done");
/* USER CODE END 2 */ /* USER CODE END 2 */

View File

@ -169,7 +169,7 @@ static void RemoteControlSet() {
// ... // ...
gimbal_cmd_send.yaw -= 0.0005f * (float) rc_data[TEMP].rc.rocker_l_; gimbal_cmd_send.yaw -= 0.0005f * (float) rc_data[TEMP].rc.rocker_l_;
gimbal_cmd_send.big_yaw -= 0.0005f * (float) rc_data[TEMP].rc.rocker_l_; gimbal_cmd_send.big_yaw -= 0.0005f * (float) rc_data[TEMP].rc.rocker_l_;
gimbal_cmd_send.pitch -= 0.001f * (float) rc_data[TEMP].rc.rocker_l1; gimbal_cmd_send.pitch -= 0.0005f * (float) rc_data[TEMP].rc.rocker_l1;
if (gimbal_cmd_send.pitch >= PITCH_MAX_ANGLE) gimbal_cmd_send.pitch = PITCH_MAX_ANGLE; if (gimbal_cmd_send.pitch >= PITCH_MAX_ANGLE) gimbal_cmd_send.pitch = PITCH_MAX_ANGLE;
if (gimbal_cmd_send.pitch <= PITCH_MIN_ANGLE) gimbal_cmd_send.pitch = PITCH_MIN_ANGLE; if (gimbal_cmd_send.pitch <= PITCH_MIN_ANGLE) gimbal_cmd_send.pitch = PITCH_MIN_ANGLE;

View File

@ -86,18 +86,18 @@ void GimbalInit()
}, },
.controller_param_init_config = { .controller_param_init_config = {
.angle_PID = { .angle_PID = {
.Kp = 1.0f,//4.0f,//2.0f .Kp = -1.8f,//4.0f,//2.0f
.Ki = 0.0f,//1,//0 .Ki = -1.5f,//1,//0
.Kd = 0.0f,//0.0f .Kd = 0.0f,//0.0f
.Improve = PID_Trapezoid_Intergral | PID_Integral_Limit | PID_Derivative_On_Measurement, .Improve = PID_Trapezoid_Intergral | PID_Integral_Limit | PID_Derivative_On_Measurement,
.IntegralLimit = 100, .IntegralLimit = 100,
.MaxOut = 500, .MaxOut = 500,
}, },
.speed_PID = { .speed_PID = {
.Kp = 2500,//6000,//800 .Kp = -4000,//-4500,//6000,//800
.Ki = 500,//500,//100 .Ki = -10000, //-600,//500,//100
.Kd = 0,//0 .Kd = 0,//0
.Improve = PID_Trapezoid_Intergral | PID_Integral_Limit | PID_Derivative_On_Measurement, .Improve = PID_Integral_Limit | PID_Derivative_On_Measurement,
.IntegralLimit = 10000, .IntegralLimit = 10000,
.MaxOut = 30000, .MaxOut = 30000,
}, },
@ -257,7 +257,8 @@ void GimbalTask()
//yaw轴角速度 //yaw轴角速度
//重力补偿力矩 //重力补偿力矩
current_feedforward = (7000)*arm_cos_f32(theta); current_feedforward = (1500)*arm_cos_f32(theta);
//current_feedforward = 0;
float vofa_send_data[6]; float vofa_send_data[6];
vofa_send_data[0] = pitch_motor->measure.speed_aps; vofa_send_data[0] = pitch_motor->measure.speed_aps;
vofa_send_data[1] = gimba_IMU_data->Pitch; vofa_send_data[1] = gimba_IMU_data->Pitch;

View File

@ -29,8 +29,8 @@
#define YAW_CHASSIS_ALIGN_ECD 8012 // 云台和底盘对齐指向相同方向时的电机编码器值,若对云台有机械改动需要修改 #define YAW_CHASSIS_ALIGN_ECD 8012 // 云台和底盘对齐指向相同方向时的电机编码器值,若对云台有机械改动需要修改
#define YAW_ECD_GREATER_THAN_4096 0 // ALIGN_ECD值是否大于4096,是为1,否为0;用于计算云台偏转角度 #define YAW_ECD_GREATER_THAN_4096 0 // ALIGN_ECD值是否大于4096,是为1,否为0;用于计算云台偏转角度
#define PITCH_HORIZON_ECD 3412 // 云台处于水平位置时编码器值,若对云台有机械改动需要修改 #define PITCH_HORIZON_ECD 3412 // 云台处于水平位置时编码器值,若对云台有机械改动需要修改
#define PITCH_MAX_ANGLE 39 // 云台竖直方向最大角度 (注意反馈如果是陀螺仪,则填写陀螺仪的角度) #define PITCH_MAX_ANGLE 34 // 云台竖直方向最大角度 (注意反馈如果是陀螺仪,则填写陀螺仪的角度)
#define PITCH_MIN_ANGLE -18 // 云台竖直方向最小角度 (注意反馈如果是陀螺仪,则填写陀螺仪的角度) #define PITCH_MIN_ANGLE -15 // 云台竖直方向最小角度 (注意反馈如果是陀螺仪,则填写陀螺仪的角度)
#define YAW_MAX_ENCODE_ANGLE -10.0f //小yaw编码器限位 #define YAW_MAX_ENCODE_ANGLE -10.0f //小yaw编码器限位
#define YAW_MIN_ENCODE_ANGLE -90.0f #define YAW_MIN_ENCODE_ANGLE -90.0f

View File

@ -147,8 +147,8 @@ static void VisionOfflineCallback(void *id)
#ifdef VISION_USE_UART #ifdef VISION_USE_UART
USARTServiceInit(vision_usart_instance); USARTServiceInit(vision_usart_instance);
#endif // !VISION_USE_UART #endif // !VISION_USE_UART
USB_Init_Config_s conf = {.rx_cbk = DecodeVision}; //USB_Init_Config_s conf = {.rx_cbk = DecodeVision};
vis_recv_buff = USBInit(conf); //vis_recv_buff = USBInit(conf);
LOGWARNING("[vision] vision offline, restart communication."); LOGWARNING("[vision] vision offline, restart communication.");
} }

View File

@ -29,6 +29,7 @@ void DMMotorSetMode(DMMotor_Mode_e cmd, DMMotorInstance *motor)
{ {
memset(motor->motor_can_instance->tx_buff, 0xff, 7); // 发送电机指令的时候前面7bytes都是0xff memset(motor->motor_can_instance->tx_buff, 0xff, 7); // 发送电机指令的时候前面7bytes都是0xff
motor->motor_can_instance->tx_buff[7] = (uint8_t)cmd; // 最后一位是命令id motor->motor_can_instance->tx_buff[7] = (uint8_t)cmd; // 最后一位是命令id
LOGINFO("DMMotorSetMode");
CANTransmit(motor->motor_can_instance, 1); CANTransmit(motor->motor_can_instance, 1);
} }

View File

@ -33,6 +33,7 @@ void OnProjectLoad (void) {
// //
// User settings // User settings
// //
Edit.SysVar (VAR_HSS_SPEED, FREQ_200_HZ);
File.Open ("$(ProjectDir)/cmake-build-debug/sentry_left.elf"); File.Open ("$(ProjectDir)/cmake-build-debug/sentry_left.elf");
Project.SetOSPlugin ("FreeRTOSPlugin_CM4"); Project.SetOSPlugin ("FreeRTOSPlugin_CM4");
} }

View File

@ -1,43 +1,30 @@
Breakpoint=D:/CLion/Project/sentry_left/modules/motor/DJImotor/dji_motor.c:316, State=BP_STATE_DISABLED OpenDocument="main.c", FilePath="C:/Users/sph/Desktop/sentry_left/Src/main.c", Line=59
Breakpoint=D:/CLion/Project/sentry_left/modules/motor/DJImotor/dji_motor.c:328, State=BP_STATE_DISABLED OpenDocument="robot_cmd.c", FilePath="C:/Users/sph/Desktop/sentry_left/application/cmd/robot_cmd.c", Line=69
Breakpoint=D:/CLion/Project/sentry_left/modules/motor/DJImotor/dji_motor.c:362:9, State=BP_STATE_DISABLED OpenDocument="dji_motor.c", FilePath="C:/Users/sph/Desktop/sentry_left/modules/motor/DJImotor/dji_motor.c", Line=68
OpenDocument="main.c", FilePath="D:/CLion/Project/sentry_left/Src/main.c", Line=60 OpenDocument="bsp_dwt.c", FilePath="C:/Users/sph/Desktop/sentry_left/bsp/dwt/bsp_dwt.c", Line=30
OpenDocument="gimbal.c", FilePath="C:/Users/sph/Desktop/sentry_left/application/gimbal/gimbal.c", Line=87
OpenDocument="robot_def.h", FilePath="C:/Users/sph/Desktop/sentry_left/application/robot_def.h", Line=151
OpenToolbar="Debug", Floating=0, x=0, y=0 OpenToolbar="Debug", Floating=0, x=0, y=0
OpenWindow="Memory 1", DockArea=BOTTOM, x=2, y=0, w=341, h=302, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, EditorAddress=0x20009694 OpenWindow="Source Files", DockArea=LEFT, x=0, y=0, w=555, h=334, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0
OpenWindow="Watched Data 1", DockArea=LEFT, x=0, y=0, w=567, h=622, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 OpenWindow="Break & Tracepoints", DockArea=LEFT, x=0, y=1, w=555, h=302, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, VectorCatchIndexMask=254
OpenWindow="Data Sampling", DockArea=BOTTOM, x=0, y=0, w=544, h=302, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, VisibleTab=0, UniformSampleSpacing=0 OpenWindow="Memory 1", DockArea=BOTTOM, x=1, y=0, w=485, h=170, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, EditorAddress=0x20008C00
OpenWindow="Timeline", DockArea=RIGHT, x=0, y=0, w=855, h=622, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=1, DataPaneShown=1, PowerPaneShown=0, CodePaneShown=0, PinCursor="Cursor Movable", TimePerDiv="2 s / Div", TimeStampFormat="Time", DataGraphDrawAsPoints=0, DataGraphLegendShown=1, DataGraphUniformSampleSpacing=0, DataGraphLegendPosition="354;0", DataGraphShowNamesAtCursor=0, PowerGraphDrawAsPoints=0, PowerGraphLegendShown=0, PowerGraphAvgFilterTime=Off, PowerGraphAvgFilterLen=Off, PowerGraphUniformSampleSpacing=0, PowerGraphLegendPosition="676;0", CodeGraphLegendShown=0, CodeGraphLegendPosition="690;0" OpenWindow="Local Data", DockArea=LEFT, x=0, y=2, w=555, h=401, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0
OpenWindow="Console", DockArea=BOTTOM, x=1, y=0, w=1033, h=302, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 OpenWindow="Data Sampling", DockArea=RIGHT, x=0, y=1, w=591, h=173, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, VisibleTab=0, UniformSampleSpacing=0
OpenWindow="Timeline", DockArea=RIGHT, x=0, y=0, w=591, h=184, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=1, DataPaneShown=1, PowerPaneShown=0, CodePaneShown=0, PinCursor="Cursor Movable", TimePerDiv="5 s / Div", TimeStampFormat="Time", DataGraphDrawAsPoints=0, DataGraphLegendShown=1, DataGraphUniformSampleSpacing=0, DataGraphLegendPosition="0;0", DataGraphShowNamesAtCursor=0, PowerGraphDrawAsPoints=0, PowerGraphLegendShown=0, PowerGraphAvgFilterTime=Off, PowerGraphAvgFilterLen=Off, PowerGraphUniformSampleSpacing=0, PowerGraphLegendPosition="577;-69", CodeGraphLegendShown=0, CodeGraphLegendPosition="593;0"
OpenWindow="Console", DockArea=BOTTOM, x=0, y=0, w=477, h=170, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0
SmartViewPlugin="", Page="", Toolbar="Hidden", Window="SmartView 1" SmartViewPlugin="", Page="", Toolbar="Hidden", Window="SmartView 1"
TableHeader="Data Sampling Table", SortCol="None", SortOrder="ASCENDING", VisibleCols=["Index";"Time"], ColWidths=[100;100] TableHeader="Vector Catches", SortCol="", SortOrder="ASCENDING", VisibleCols=["";"Vector Catch";"Description"], ColWidths=[50;300;500]
TableHeader="Data Sampling Setup", SortCol="Expression", SortOrder="ASCENDING", VisibleCols=["Expression";"Type";"Value";"Min";"Max";"Average";"# Changes";"Min. Change";"Max. Change"], ColWidths=[438;100;100;100;100;100;100;107;107] TableHeader="Break & Tracepoints", SortCol="", SortOrder="ASCENDING", VisibleCols=["";"Type";"Location";"Extras"], ColWidths=[100;100;102;253]
TableHeader="Local Data", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Value";"Location";"Size";"Type";"Scope"], ColWidths=[100;100;102;100;100;100]
TableHeader="Power Sampling", SortCol="None", SortOrder="ASCENDING", VisibleCols=["Index";"Time";"Ch 0"], ColWidths=[100;100;100] TableHeader="Power Sampling", SortCol="None", SortOrder="ASCENDING", VisibleCols=["Index";"Time";"Ch 0"], ColWidths=[100;100;100]
TableHeader="Task List", SortCol="None", SortOrder="ASCENDING", VisibleCols=["Name";"Run Count";"Priority";"Status";"Timeout";"Stack Info";"ID";"Mutex Count";"Notified Value";"Notify State"], ColWidths=[110;110;110;110;110;110;110;110;110;110] TableHeader="Task List", SortCol="None", SortOrder="ASCENDING", VisibleCols=["Name";"Run Count";"Priority";"Status";"Timeout";"Stack Info";"ID";"Mutex Count";"Notified Value";"Notify State"], ColWidths=[110;110;110;110;110;110;110;110;110;110]
TableHeader="Watched Data 1", SortCol="Expression", SortOrder="ASCENDING", VisibleCols=["Expression";"Value";"Location";"Refresh"], ColWidths=[275;134;100;100]
TableHeader="RegisterSelectionDialog", SortCol="None", SortOrder="ASCENDING", VisibleCols=[], ColWidths=[] TableHeader="RegisterSelectionDialog", SortCol="None", SortOrder="ASCENDING", VisibleCols=[], ColWidths=[]
TableHeader="TargetExceptionDialog", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Value";"Address";"Description"], ColWidths=[200;100;100;351] TableHeader="TargetExceptionDialog", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Value";"Address";"Description"], ColWidths=[200;100;100;340]
WatchedExpression="INS", DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1 TableHeader="Data Sampling Table", SortCol="None", SortOrder="ASCENDING", VisibleCols=["Index";"Time"], ColWidths=[100;704]
WatchedExpression="pitch_motor", RefreshRate=5, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1 TableHeader="Data Sampling Setup", SortCol="Expression", SortOrder="ASCENDING", VisibleCols=["Expression";"Type";"Value";"Min";"Max";"Average";"# Changes";"Min. Change";"Max. Change"], ColWidths=[438;100;100;100;100;100;110;126;126]
WatchedExpression="gimbal_cmd_recv", RefreshRate=5, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1 TableHeader="Source Files", SortCol="File", SortOrder="ASCENDING", VisibleCols=["File";"Status";"Size";"#Insts";"Path"], ColWidths=[263;100;100;100;878]
WatchedExpression="rc_data", RefreshRate=5, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="yaw_motor", RefreshRate=5, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="motor_can_ins", DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="big_yaw_motor", RefreshRate=2, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="big_yaw_angle", RefreshRate=2, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="friction_l", RefreshRate=2, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="gimbal_feedback_data", RefreshRate=1, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="chassis_cmd_recv", RefreshRate=2, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1 WatchedExpression="chassis_cmd_recv", RefreshRate=2, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="big_yaw_relative_angle", RefreshRate=2, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1 WatchedExpression="pitch_motor", RefreshRate=2, Window=Watched Data 1
WatchedExpression="pid_ref", DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="send_data", RefreshRate=5, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="vision_recv_data", RefreshRate=2, Window=Watched Data 1
WatchedExpression="chassis_fetch_data", RefreshRate=2, Window=Watched Data 1
WatchedExpression="sentry_state", RefreshRate=2, Window=Watched Data 1
WatchedExpression="referee_recv_info", Window=Watched Data 1
WatchedExpression="loader", RefreshRate=2, Window=Watched Data 1
WatchedExpression="gimbal_cmd_send", RefreshRate=2, Window=Watched Data 1
WatchedExpression="recover_start_T", RefreshRate=2, Window=Watched Data 1
WatchedExpression="vision_recv_data", RefreshRate=2, Window=Watched Data 1