修改底盘id,通信,云台跟随

This commit is contained in:
shmily744 2024-03-17 21:45:23 +08:00
parent 7d926dcd15
commit a32ac620ea
7 changed files with 102 additions and 113 deletions

View File

@ -93,21 +93,21 @@ void ChassisInit()
.motor_type = M3508, .motor_type = M3508,
}; };
// @todo: 当前还没有设置电机的正反转,仍然需要手动添加reference的正负号,需要电机module的支持,待修改. // @todo: 当前还没有设置电机的正反转,仍然需要手动添加reference的正负号,需要电机module的支持,待修改.
chassis_motor_config.can_init_config.tx_id = 2; chassis_motor_config.can_init_config.tx_id = 3;
chassis_motor_config.controller_setting_init_config.motor_reverse_flag = MOTOR_DIRECTION_NORMAL; chassis_motor_config.controller_setting_init_config.motor_reverse_flag = MOTOR_DIRECTION_REVERSE;
motor_lf = DJIMotorInit(&chassis_motor_config); motor_lf = DJIMotorInit(&chassis_motor_config);
chassis_motor_config.can_init_config.tx_id = 1; chassis_motor_config.can_init_config.tx_id = 2;
chassis_motor_config.controller_setting_init_config.motor_reverse_flag = MOTOR_DIRECTION_NORMAL; chassis_motor_config.controller_setting_init_config.motor_reverse_flag = MOTOR_DIRECTION_REVERSE;
motor_rf = DJIMotorInit(&chassis_motor_config); motor_rf = DJIMotorInit(&chassis_motor_config);
chassis_motor_config.can_init_config.tx_id = 3; chassis_motor_config.can_init_config.tx_id = 4;
chassis_motor_config.controller_setting_init_config.motor_reverse_flag = MOTOR_DIRECTION_NORMAL; chassis_motor_config.controller_setting_init_config.motor_reverse_flag = MOTOR_DIRECTION_REVERSE;
motor_lb = DJIMotorInit(&chassis_motor_config); motor_lb = DJIMotorInit(&chassis_motor_config);
chassis_motor_config.can_init_config.tx_id = 4; chassis_motor_config.can_init_config.tx_id = 1;
chassis_motor_config.controller_setting_init_config.motor_reverse_flag = MOTOR_DIRECTION_NORMAL; chassis_motor_config.controller_setting_init_config.motor_reverse_flag = MOTOR_DIRECTION_REVERSE;
motor_rb = DJIMotorInit(&chassis_motor_config); motor_rb = DJIMotorInit(&chassis_motor_config);
referee_data = UITaskInit(&huart6,&ui_data); // 裁判系统初始化,会同时初始化UI referee_data = UITaskInit(&huart6,&ui_data); // 裁判系统初始化,会同时初始化UI
@ -260,7 +260,7 @@ void ChassisTask()
DJIMotorEnable(motor_lb); DJIMotorEnable(motor_lb);
DJIMotorEnable(motor_rb); DJIMotorEnable(motor_rb);
} }
chassis_cmd_recv.offset_angle = chassis_cmd_recv.offset_angle * RAD_2_DEGREE; //chassis_cmd_recv.offset_angle = chassis_cmd_recv.offset_angle * RAD_2_DEGREE;
// 根据控制模式设定旋转速度 // 根据控制模式设定旋转速度
switch (chassis_cmd_recv.chassis_mode) switch (chassis_cmd_recv.chassis_mode)
{ {
@ -270,7 +270,7 @@ void ChassisTask()
//chassis_cmd_recv.wz = 100.0f * chassis_cmd_recv.offset_angle * abs(chassis_cmd_recv.offset_angle); //chassis_cmd_recv.wz = 100.0f * chassis_cmd_recv.offset_angle * abs(chassis_cmd_recv.offset_angle);
break; break;
case CHASSIS_FOLLOW_GIMBAL_YAW: // 跟随云台,不单独设置pid,以误差角度平方为速度输出 case CHASSIS_FOLLOW_GIMBAL_YAW: // 跟随云台,不单独设置pid,以误差角度平方为速度输出
//chassis_cmd_recv.wz = 1.5f * chassis_cmd_recv.offset_angle * abs(chassis_cmd_recv.offset_angle); chassis_cmd_recv.wz = 0.05f * chassis_cmd_recv.offset_angle;
break; break;
case CHASSIS_ROTATE: // 自旋,同时保持全向机动;当前wz维持定值,后续增加不规则的变速策略 case CHASSIS_ROTATE: // 自旋,同时保持全向机动;当前wz维持定值,后续增加不规则的变速策略
chassis_cmd_recv.wz = -5; chassis_cmd_recv.wz = -5;

View File

@ -14,7 +14,7 @@
#include "bsp_log.h" #include "bsp_log.h"
// 私有宏,自动将编码器转换成角度值 // 私有宏,自动将编码器转换成角度值
#define YAW_ALIGN_ANGLE 0.87f //(YAW_CHASSIS_ALIGN_ECD * ECD_ANGLE_COEF_DJI) // 对齐时的角度,0-360 #define YAW_ALIGN_ANGLE 272.799561F //(YAW_CHASSIS_ALIGN_ECD * ECD_ANGLE_COEF_DJI) // 对齐时的角度,0-360
#define PTICH_HORIZON_ANGLE (PITCH_HORIZON_ECD * ECD_ANGLE_COEF_DJI) // pitch水平时电机的角度,0-360 #define PTICH_HORIZON_ANGLE (PITCH_HORIZON_ECD * ECD_ANGLE_COEF_DJI) // pitch水平时电机的角度,0-360
/* cmd应用包含的模块实例指针和交互信息存储*/ /* cmd应用包含的模块实例指针和交互信息存储*/
@ -124,8 +124,8 @@ static void RemoteControlSet()
} }
else if (switch_is_mid(rc_data[TEMP].rc.switch_right)) // 右侧开关状态[中],底盘和云台分离,底盘保持不转动 else if (switch_is_mid(rc_data[TEMP].rc.switch_right)) // 右侧开关状态[中],底盘和云台分离,底盘保持不转动
{ {
chassis_cmd_send.chassis_mode = CHASSIS_NO_FOLLOW; chassis_cmd_send.chassis_mode = CHASSIS_FOLLOW_GIMBAL_YAW;
gimbal_cmd_send.gimbal_mode = GIMBAL_FREE_MODE; gimbal_cmd_send.gimbal_mode = GIMBAL_GYRO_MODE;
} }
// 云台参数,确定云台控制数据 // 云台参数,确定云台控制数据

View File

@ -248,7 +248,7 @@ void GimbalTask()
big_yaw_relative_angle = big_yaw_motor->measure.total_angle * (4.0f/3.0f); big_yaw_relative_angle = big_yaw_motor->measure.total_angle * (4.0f/3.0f);
gimbal_feedback_data.yaw_motor_single_round_angle = loop_float_constrain(big_yaw_relative_angle,-PI,PI); gimbal_feedback_data.yaw_motor_single_round_angle = loop_float_constrain(big_yaw_relative_angle,0,2*PI) * RAD_2_DEGREE;
gimbal_feedback_data.mini_yaw_encode_angle = yaw_motor->measure.angle_single_round; gimbal_feedback_data.mini_yaw_encode_angle = yaw_motor->measure.angle_single_round;
// 推送消息 // 推送消息

View File

@ -27,7 +27,7 @@
/* 机器人重要参数定义,注意根据不同机器人进行修改,浮点数需要以.0或f结尾,无符号以u结尾 */ /* 机器人重要参数定义,注意根据不同机器人进行修改,浮点数需要以.0或f结尾,无符号以u结尾 */
// 云台参数 // 云台参数
#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 1 // ALIGN_ECD值是否大于4096,是为1,否为0;用于计算云台偏转角度
#define PITCH_HORIZON_ECD 3412 // 云台处于水平位置时编码器值,若对云台有机械改动需要修改 #define PITCH_HORIZON_ECD 3412 // 云台处于水平位置时编码器值,若对云台有机械改动需要修改
#define PITCH_MAX_ANGLE 39 // 云台竖直方向最大角度 (注意反馈如果是陀螺仪,则填写陀螺仪的角度) #define PITCH_MAX_ANGLE 39 // 云台竖直方向最大角度 (注意反馈如果是陀螺仪,则填写陀螺仪的角度)
#define PITCH_MIN_ANGLE -18 // 云台竖直方向最小角度 (注意反馈如果是陀螺仪,则填写陀螺仪的角度) #define PITCH_MIN_ANGLE -18 // 云台竖直方向最小角度 (注意反馈如果是陀螺仪,则填写陀螺仪的角度)

View File

@ -49,22 +49,6 @@ void VisionSetAim(float aim_x, float aim_y, float aim_z) {
} }
/**
* @brief 线,daemon.c中被daemon task调用
* @attention HAL库的设计问题,DMA接收之后同时发送有概率出现__HAL_LOCK(),使
* .daemon判断数据更新,.
*
* @param id vision_usart_instance的地址,.
*/
static void VisionOfflineCallback(void *id)
{
#ifdef VISION_USE_UART
USARTServiceInit(vision_usart_instance);
#endif // !VISION_USE_UART
LOGWARNING("[vision] vision offline, restart communication.");
memset(&recv_data,0,sizeof(recv_data));
}
#ifdef VISION_USE_UART #ifdef VISION_USE_UART
@ -143,12 +127,29 @@ static void DecodeVision(uint16_t recv_len)
{ {
if(VerifyCRC16CheckSum(vis_recv_buff,sizeof(recv_data))) if(VerifyCRC16CheckSum(vis_recv_buff,sizeof(recv_data)))
{ {
DaemonReload(vision_daemon_instance); //喂狗 DaemonReload(vision_daemon_instance);
memcpy(&recv_data,vis_recv_buff,sizeof(recv_data)); memcpy(&recv_data,vis_recv_buff,sizeof(recv_data));
} }
} }
} }
/**
* @brief 线,daemon.c中被daemon task调用
* @attention HAL库的设计问题,DMA接收之后同时发送有概率出现__HAL_LOCK(),使
* .daemon判断数据更新,.
*
* @param id vision_usart_instance的地址,.
*/
static void VisionOfflineCallback(void *id)
{
#ifdef VISION_USE_UART
USARTServiceInit(vision_usart_instance);
#endif // !VISION_USE_UART
USB_Init_Config_s conf = {.rx_cbk = DecodeVision};
vis_recv_buff = USBInit(conf);
LOGWARNING("[vision] vision offline, restart communication.");
}
/* 视觉通信初始化 */ /* 视觉通信初始化 */
RecievePacket_t *VisionInit(UART_HandleTypeDef *_handle) RecievePacket_t *VisionInit(UART_HandleTypeDef *_handle)
{ {

View File

@ -9,17 +9,14 @@
#include "usbd_cdc_if.h" #include "usbd_cdc_if.h"
/*VOFA浮点协议*/ /*VOFA浮点协议*/
void vofa_justfloat_output(float *data, uint8_t num , UART_HandleTypeDef *huart ) void vofa_justfloat_output(float *data, uint8_t num, UART_HandleTypeDef *huart) {
{
static uint8_t i = 0; static uint8_t i = 0;
send_float temp[num]; //定义缓冲区数组 send_float temp[num]; //定义缓冲区数组
uint8_t send_data[4 * num + 4]; //定义通过串口传出去的数组数量是所传数据的字节数加上4个字节的尾巴 uint8_t send_data[4 * num + 4]; //定义通过串口传出去的数组数量是所传数据的字节数加上4个字节的尾巴
for (i = 0; i < num; i++) for (i = 0; i < num; i++) {
{
temp[i].float_t = data[i]; //将所传数据移到缓冲区数组 temp[i].float_t = data[i]; //将所传数据移到缓冲区数组
} }
for (i = 0; i < num; i++) for (i = 0; i < num; i++) {
{
send_data[4 * i] = temp[i].uint8_t[0]; send_data[4 * i] = temp[i].uint8_t[0];
send_data[4 * i + 1] = temp[i].uint8_t[1]; send_data[4 * i + 1] = temp[i].uint8_t[1];
send_data[4 * i + 2] = temp[i].uint8_t[2]; send_data[4 * i + 2] = temp[i].uint8_t[2];
@ -30,8 +27,8 @@ void vofa_justfloat_output(float *data, uint8_t num , UART_HandleTypeDef *huart
send_data[4 * num + 2] = 0x80; send_data[4 * num + 2] = 0x80;
send_data[4 * num + 3] = 0x7f; //加上协议要求的4个尾巴 send_data[4 * num + 3] = 0x7f; //加上协议要求的4个尾巴
//HAL_UART_Transmit(huart, (uint8_t *)send_data, 4 * num + 4, 100); HAL_UART_Transmit(huart, (uint8_t *) send_data, 4 * num + 4, 100);
CDC_Transmit_FS((uint8_t *)send_data,4 * num + 4); //CDC_Transmit_FS((uint8_t *)send_data,4 * num + 4);
} }
#define BYTE0(dwTemp) (*(char*)(&dwTemp)) #define BYTE0(dwTemp) (*(char*)(&dwTemp))
@ -40,45 +37,45 @@ void vofa_justfloat_output(float *data, uint8_t num , UART_HandleTypeDef *huart
#define BYTE3(dwTemp) (*((char*)(&dwTemp)+3)) #define BYTE3(dwTemp) (*((char*)(&dwTemp)+3))
uint8_t DataSendBuf[100]; uint8_t DataSendBuf[100];
//匿名上位机 //匿名上位机
void ANODT_SendF1(int32_t Angle,int32_t speed_rpm,int32_t Angle_target,int32_t speed_target)//F1灵活格式帧 void ANODT_SendF1(int32_t Angle, int32_t speed_rpm, int32_t Angle_target, int32_t speed_target)//F1灵活格式帧
{ {
uint8_t cnt=0; uint8_t cnt = 0;
DataSendBuf[cnt++]=0xAA; //帧头 DataSendBuf[cnt++] = 0xAA; //帧头
DataSendBuf[cnt++]=0xFF; //目标地址 DataSendBuf[cnt++] = 0xFF; //目标地址
DataSendBuf[cnt++]=0xF1; //功能码 DataSendBuf[cnt++] = 0xF1; //功能码
DataSendBuf[cnt++]=16; //数据长度 DataSendBuf[cnt++] = 16; //数据长度
DataSendBuf[cnt++]=BYTE0(Angle); DataSendBuf[cnt++] = BYTE0(Angle);
DataSendBuf[cnt++]=BYTE1(Angle); DataSendBuf[cnt++] = BYTE1(Angle);
DataSendBuf[cnt++]=BYTE2(Angle); DataSendBuf[cnt++] = BYTE2(Angle);
DataSendBuf[cnt++]=BYTE3(Angle); DataSendBuf[cnt++] = BYTE3(Angle);
DataSendBuf[cnt++]=BYTE0(speed_rpm); DataSendBuf[cnt++] = BYTE0(speed_rpm);
DataSendBuf[cnt++]=BYTE1(speed_rpm); DataSendBuf[cnt++] = BYTE1(speed_rpm);
DataSendBuf[cnt++]=BYTE2(speed_rpm); DataSendBuf[cnt++] = BYTE2(speed_rpm);
DataSendBuf[cnt++]=BYTE3(speed_rpm); DataSendBuf[cnt++] = BYTE3(speed_rpm);
DataSendBuf[cnt++]=BYTE0(Angle_target); DataSendBuf[cnt++] = BYTE0(Angle_target);
DataSendBuf[cnt++]=BYTE1(Angle_target); DataSendBuf[cnt++] = BYTE1(Angle_target);
DataSendBuf[cnt++]=BYTE2(Angle_target); DataSendBuf[cnt++] = BYTE2(Angle_target);
DataSendBuf[cnt++]=BYTE3(Angle_target); DataSendBuf[cnt++] = BYTE3(Angle_target);
DataSendBuf[cnt++]=BYTE0(speed_target); DataSendBuf[cnt++] = BYTE0(speed_target);
DataSendBuf[cnt++]=BYTE1(speed_target); DataSendBuf[cnt++] = BYTE1(speed_target);
DataSendBuf[cnt++]=BYTE2(speed_target); DataSendBuf[cnt++] = BYTE2(speed_target);
DataSendBuf[cnt++]=BYTE3(speed_target); DataSendBuf[cnt++] = BYTE3(speed_target);
uint8_t sc=0; //和校验 uint8_t sc = 0; //和校验
uint8_t ac=0; //附加校验 uint8_t ac = 0; //附加校验
for(uint8_t i=0;i<DataSendBuf[3]+4;i++) for (uint8_t i = 0; i < DataSendBuf[3] + 4; i++) {
{ sc += DataSendBuf[i];
sc+=DataSendBuf[i]; ac += sc;
ac+=sc;
} }
DataSendBuf[cnt++]=sc; DataSendBuf[cnt++] = sc;
DataSendBuf[cnt++]=ac; DataSendBuf[cnt++] = ac;
for(uint8_t i=0;i<cnt;i++) for (uint8_t i = 0; i < cnt; i++)
HAL_UART_Transmit(&huart6,&DataSendBuf[i],1,100); HAL_UART_Transmit(&huart6, &DataSendBuf[i], 1, 100);
} }

View File

@ -1,50 +1,41 @@
Breakpoint=D:/CLion/Project/sentry_left/modules/motor/DJImotor/dji_motor.c:316, State=BP_STATE_DISABLED Breakpoint=C:/Users/sph/Desktop/sentry_left/modules/motor/DJImotor/dji_motor.c:316, State=BP_STATE_DISABLED
Breakpoint=D:/CLion/Project/sentry_left/modules/motor/DJImotor/dji_motor.c:328, State=BP_STATE_DISABLED Breakpoint=C:/Users/sph/Desktop/sentry_left/modules/motor/DJImotor/dji_motor.c:328, State=BP_STATE_DISABLED
Breakpoint=D:/CLion/Project/sentry_left/modules/motor/DJImotor/dji_motor.c:362:9, State=BP_STATE_DISABLED Breakpoint=C:/Users/sph/Desktop/sentry_left/modules/motor/DJImotor/dji_motor.c:362:9, State=BP_STATE_DISABLED
OpenDocument="dji_motor.c", FilePath="D:/CLion/Project/sentry_left/modules/motor/DJImotor/dji_motor.c", Line=343 OpenDocument="master_process.c", FilePath="C:/Users/sph/Desktop/sentry_left/modules/master_machine/master_process.c", Line=126
OpenDocument="ECA8210.c", FilePath="D:/CLion/Project/sentry_left/modules/motor/ECmotor/ECA8210.c", Line=23 OpenDocument="main.c", FilePath="C:/Users/sph/Desktop/sentry_left/Src/main.c", Line=56
OpenDocument="ECA8210.h", FilePath="D:/CLion/Project/sentry_left/modules/motor/ECmotor/ECA8210.h", Line=48
OpenDocument="main.c", FilePath="D:/CLion/Project/sentry_left/Src/main.c", Line=70
OpenDocument="stm32f4xx_hal_can.c", FilePath="D:/CLion/Project/sentry_left/Drivers/STM32F4xx_HAL_Driver/Src/stm32f4xx_hal_can.c", Line=1413
OpenDocument="bsp_dwt.c", FilePath="D:/CLion/Project/sentry_left/bsp/dwt/bsp_dwt.c", Line=76
OpenDocument="chassis.c", FilePath="D:/CLion/Project/sentry_left/application/chassis/chassis.c", Line=264
OpenDocument="startup_stm32f407ighx.s", FilePath="D:/CLion/Project/sentry_left/Startup/startup_stm32f407ighx.s", Line=52
OpenDocument="robot_cmd.c", FilePath="D:/CLion/Project/sentry_left/application/cmd/robot_cmd.c", Line=311
OpenDocument="motor_task.c", FilePath="D:/CLion/Project/sentry_left/modules/motor/motor_task.c", Line=0
OpenDocument="controller.c", FilePath="D:/CLion/Project/sentry_left/modules/algorithm/controller.c", Line=52
OpenDocument="SEGGER_RTT_printf.c", FilePath="D:/CLion/Project/sentry_left/Middlewares/Third_Party/SEGGER/RTT/SEGGER_RTT_printf.c", Line=94
OpenToolbar="Debug", Floating=0, x=0, y=0 OpenToolbar="Debug", Floating=0, x=0, y=0
OpenWindow="Registers 1", DockArea=RIGHT, x=0, y=1, w=514, h=416, TabPos=1, TopOfStack=0, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, FilteredItems=[], RefreshRate=1 OpenWindow="Registers 1", DockArea=RIGHT, x=0, y=1, w=591, h=632, TabPos=1, TopOfStack=0, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, FilteredItems=[], RefreshRate=1
OpenWindow="Source Files", DockArea=LEFT, x=0, y=0, w=569, h=318, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 OpenWindow="Source Files", DockArea=LEFT, x=0, y=0, w=720, h=487, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0
OpenWindow="Disassembly", DockArea=RIGHT, x=0, y=0, w=514, h=204, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 OpenWindow="Disassembly", DockArea=RIGHT, x=0, y=0, w=591, h=322, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0
OpenWindow="Memory 1", DockArea=BOTTOM, x=2, y=0, w=408, h=287, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, EditorAddress=0x0 OpenWindow="Memory 1", DockArea=BOTTOM, x=2, y=0, w=545, h=287, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, EditorAddress=0x20009694
OpenWindow="Watched Data 1", DockArea=LEFT, x=0, y=1, w=569, h=318, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 OpenWindow="Watched Data 1", DockArea=LEFT, x=0, y=1, w=720, h=486, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0
OpenWindow="Data Sampling", DockArea=BOTTOM, x=1, y=0, w=969, h=287, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, VisibleTab=0, UniformSampleSpacing=0 OpenWindow="Data Sampling", DockArea=BOTTOM, x=1, y=0, w=1292, h=287, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0, VisibleTab=0, UniformSampleSpacing=0
OpenWindow="Timeline", DockArea=RIGHT, x=0, y=1, w=514, h=416, TabPos=0, TopOfStack=1, 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="8;47", DataGraphShowNamesAtCursor=0, PowerGraphDrawAsPoints=0, PowerGraphLegendShown=0, PowerGraphAvgFilterTime=Off, PowerGraphAvgFilterLen=Off, PowerGraphUniformSampleSpacing=0, PowerGraphLegendPosition="524;0", CodeGraphLegendShown=0, CodeGraphLegendPosition="538;0" OpenWindow="Timeline", DockArea=RIGHT, x=0, y=1, w=591, h=632, TabPos=0, TopOfStack=1, 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="8;47", DataGraphShowNamesAtCursor=0, PowerGraphDrawAsPoints=0, PowerGraphLegendShown=0, PowerGraphAvgFilterTime=Off, PowerGraphAvgFilterLen=Off, PowerGraphUniformSampleSpacing=0, PowerGraphLegendPosition="831;-69", CodeGraphLegendShown=0, CodeGraphLegendPosition="847;0"
OpenWindow="Console", DockArea=BOTTOM, x=0, y=0, w=541, h=287, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0 OpenWindow="Console", DockArea=BOTTOM, x=0, y=0, w=721, h=287, FilterBarShown=0, TotalValueBarShown=0, ToolBarShown=0
SmartViewPlugin="", Page="", Toolbar="Hidden", Window="SmartView 1" SmartViewPlugin="", Page="", Toolbar="Hidden", Window="SmartView 1"
TableHeader="Registers 1", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Value";"Description"], ColWidths=[100;118;487] TableHeader="Registers 1", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Value";"Description"], ColWidths=[100;118;296]
TableHeader="Source Files", SortCol="File", SortOrder="DESCENDING", VisibleCols=["File";"Status";"Size";"#Insts";"Path"], ColWidths=[233;100;100;100;770] TableHeader="Source Files", SortCol="File", SortOrder="DESCENDING", VisibleCols=["File";"Status";"Size";"#Insts";"Path"], ColWidths=[233;100;100;100;878]
TableHeader="Data Sampling Table", SortCol="None", SortOrder="ASCENDING", VisibleCols=["Index";"Time"], ColWidths=[100;100] TableHeader="Data Sampling Table", SortCol="None", SortOrder="ASCENDING", VisibleCols=["Index";"Time"], ColWidths=[100;100]
TableHeader="Data Sampling Setup", SortCol="Type", SortOrder="DESCENDING", VisibleCols=["Expression";"Type";"Value";"Min";"Max";"Average";"# Changes";"Min. Change";"Max. Change"], ColWidths=[380;100;100;100;100;100;100;107;107] TableHeader="Data Sampling Setup", SortCol="Type", SortOrder="DESCENDING", VisibleCols=["Expression";"Type";"Value";"Min";"Max";"Average";"# Changes";"Min. Change";"Max. Change"], ColWidths=[380;100;100;100;100;100;110;126;176]
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=[237;238;100;100] TableHeader="Watched Data 1", SortCol="Expression", SortOrder="ASCENDING", VisibleCols=["Expression";"Value";"Location";"Refresh"], ColWidths=[237;238;100;119]
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=[26;26;26;26] TableHeader="TargetExceptionDialog", SortCol="Name", SortOrder="ASCENDING", VisibleCols=["Name";"Value";"Address";"Description"], ColWidths=[26;26;26;26]
WatchedExpression="INS", Window=Watched Data 1 WatchedExpression="INS", DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="pitch_motor", RefreshRate=5, Window=Watched Data 1 WatchedExpression="pitch_motor", RefreshRate=5, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="gimbal_cmd_recv", RefreshRate=5, Window=Watched Data 1 WatchedExpression="gimbal_cmd_recv", RefreshRate=5, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="rc_data", RefreshRate=5, Window=Watched Data 1 WatchedExpression="rc_data", RefreshRate=5, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="yaw_motor", RefreshRate=5, Window=Watched Data 1 WatchedExpression="yaw_motor", RefreshRate=5, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="motor_can_ins", Window=Watched Data 1 WatchedExpression="motor_can_ins", DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="big_yaw_motor", RefreshRate=5, Window=Watched Data 1 WatchedExpression="big_yaw_motor", RefreshRate=5, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="big_yaw_angle", RefreshRate=2, Window=Watched Data 1 WatchedExpression="big_yaw_angle", RefreshRate=2, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="friction_l", RefreshRate=2, Window=Watched Data 1 WatchedExpression="friction_l", RefreshRate=2, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="gimbal_feedback_data", RefreshRate=2, Window=Watched Data 1 WatchedExpression="gimbal_feedback_data", RefreshRate=2, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="chassis_cmd_recv", RefreshRate=2, 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, Window=Watched Data 1 WatchedExpression="big_yaw_relative_angle", RefreshRate=2, DisplayFormat=DISPLAY_FORMAT_HEX, Window=Watched Data 1
WatchedExpression="pid_ref", 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