file-type

深度解读Chou-main压缩技术的创新与应用

ZIP文件

下载需积分: 12 | 66.81MB | 更新于2025-09-01 | 11 浏览量 | 0 下载量 举报 收藏
download 立即下载
根据提供的信息,给出的标题为“hou”,而描述部分同样为“hou”。由于标题和描述内容非常简短且未提供具体信息,同时标签为空,压缩包子文件的文件名称列表中只有一个条目“Chou-main”,这些信息都不足以形成具体的知识点。因此,可以推测这些内容可能是为了某种特定的内部识别或分类,而非提供了足够的信息来详细阐述一个或多个技术知识点。 为了解决这个问题,我们可能需要额外的信息来理解“hou”、“Chou-main”所指代的具体含义。不过,如果我们假设这是一个关于某种技术主题的文件,而且“hou”是该技术或软件的名称,那么我们可以尝试从这个角度来猜测可能的知识点。 例如,我们可以假设“hou”可能指的是一个在某些开发环境中使用的软件库、框架或工具。鉴于我们没有任何关于该工具或库的上下文信息,我们可以从一些常见的开发工具的知识点入手来讨论。以下是一些可能相关的知识点: 1. 开发工具的通用知识点: - 版本控制:开发过程中常用的版本控制工具有Git、SVN等,它们用于代码的版本管理、分支管理、合并请求和代码审核。 - 构建工具:像Maven、Gradle、Ant或npm是用于Java、JavaScript等语言的构建自动化工具,用于依赖管理、编译、打包和部署应用程序。 - 包管理:Node.js的npm、Python的pip、Java的Maven中央仓库等,提供了一种安装和管理项目依赖的机制。 2. 编程语言特有的知识点: - 对于Java,可能会涉及到Spring框架、Hibernate等。 - 对于Python,可能会涉及到Django、Flask等Web框架,或者NumPy、Pandas等数据分析库。 - 对于JavaScript,可能会涉及到React、Vue.js、Angular等前端框架。 3. 软件开发生命周期的知识点: - 敏捷开发:包括Scrum、Kanban等实践,它们帮助团队快速响应变化、有效管理开发工作。 - 持续集成/持续部署(CI/CD):如Jenkins、Travis CI等工具,用于自动化测试和部署流程。 4. 针对特定技术或库的知识点: - 如果“hou”代表一个特定的库或工具,那么可能会包括其API的使用、配置、最佳实践、性能优化等方面的知识。 由于我们只有非常有限的信息,上述内容仅仅是基于假设的一个猜测。实际的知识点可能与上述内容完全不同,或者完全不适用于“hou”和“Chou-main”。如果能够提供更具体的信息或上下文,我们可以给出更精确、相关性更高的知识点描述。

相关推荐

filetype

#include "ti_msp_dl_config.h" #include "Time.h" #include "stdio.h" #include "Uart.h" #include "No_Mcu_Ganv_Grayscale_Sensor_Config.h" #include "Motor.h" #include "OLED.h" float base_speed=10.0; uint16_t left_time=0; uint8_t left_time_start_flag=0; uint8_t circle_Number=1;//循迹圈数 uint8_t left_cor=0;//左拐数,除以4表示圈数 uint8_t mode_flag=2;//按键控制的mode uint8_t start_flag=0;//初始化完成标志位 int32_t Encoder_Count_L=0; int32_t Encoder_Count_R=0; int32_t Get_Count_L=0; int32_t Get_Count_R=0; double L_Speed=0; double R_Speed=0; double L_Target_Speed=0.0; double R_Target_Speed=0.0; double output_speed_L=0; double output_speed_R=0; uint16_t Speed_Cal_1ms=0; uint8_t Gray_sensor_data=0; uint8_t Gray_Sensor_Arry[8]; uint8_t D1,D2,D3,D4,D5,D6,D7,D8; //初始化 No_MCU_Sensor sensor; unsigned char Digtal; unsigned short Anolog[8]={0}; unsigned short white[8]={3066,3033,3105,3082,3152,3042,3049,3033}; unsigned short black[8]={88,85,242,89,392,97,95,81}; unsigned short Normal[8]; unsigned char rx_buff[256]={0}; uint8_t HD0=1,HD1=1,HD2=1,HD3=1; /********************************************No_Mcu_Demo*******************************************/ /*****************芯片型号 MSPM0G3507 主频80Mhz ***************************************************/ /*****************引脚 AD0:PB0 AD1:PB1 AD2:PB2 ***************************************************/ /*****************OUT PA27*************************************************************************/ /********************************************No_Mcu_Demo*******************************************/ int xunPID_Error=0,last=0; float xun,p=8.0,d=25; int32_t target_velocity_left = 0,target_velocity_right = 0; int zuo_zhi = 0,you_zhi = 0; int zhijiao_hou = 0; int zhijiao_hou_cout = 0; int guai_count = 0; //拐点计次 int quanshu = 1; //圈数 int32_t KEY = 0; int KEY_jici = 0; int go_flag = 0; int main(void) { SYSCFG_DL_init(); OLED_Init(); NVIC_EnableIRQ(TIMER_A1_INST_INT_IRQN);//定时器A1使能 DL_TimerA_startCounter(TIMER_A1_INST);//定时中断计时启动 DL_TimerA_startCounter(TB6612_PWM_INST);//PWM NVIC_EnableIRQ(Key_INT_IRQN);//按键中断 NVIC_EnableIRQ(Encoder_INT_IRQN);//编码器中断 uint8_t left_flag=0; uint16_t left_flag_count=0; static int prev_left_flag = 0; // 保存上一次的值 start_flag=1; //初始化传感器,不带黑白值 No_MCU_Ganv_Sensor_Init_Frist(&sensor); No_Mcu_Ganv_Sensor_Task_Without_tick(&sensor); Get_Anolog_Value(&sensor,Anolog); //此时打印的ADC的值,可用通过这个ADC作为黑白值的校准 //也可以自己写按键逻辑完成一键校准功能 sprintf((char *)rx_buff,"Anolog %d-%d-%d-%d-%d-%d-%d-%d\r\n",Anolog[0],Anolog[1],Anolog[2],Anolog[3],Anolog[4],Anolog[5],Anolog[6],Anolog[7]); uart0_send_string((char *)rx_buff); delay_ms(100); memset(rx_buff,0,256); //得到黑白校准值之后,初始化传感器 No_MCU_Ganv_Sensor_Init(&sensor,white,black); delay_ms(100); while (1) { //HD0=DL_GPIO_readPins(GPIO_GRP_0_PORT); /**************************************************校正灰度传感器解注释以下代码,校正后重新***********************************/ // //无时基传感器常规任务,包含模拟量,数字量,归一化量 // No_Mcu_Ganv_Sensor_Task_Without_tick(&sensor); // //有时基传感器常规任务,包含模拟量,数字量,归一化量 // //No_Mcu_Ganv_Sensor_Task_With_tick(&sensor) // //获取传感器数字量结果(只有当有黑白值传入进去了之后才会有这个值!!) // Digtal=Get_Digtal_For_User(&sensor); // sprintf((char *)rx_buff,"Digtal %d-%d-%d-%d-%d-%d-%d-%d\r\n",(Digtal>>0)&0x01,(Digtal>>1)&0x01,(Digtal>>2)&0x01,(Digtal>>3)&0x01,(Digtal>>4)&0x01,(Digtal>>5)&0x01,(Digtal>>6)&0x01,(Digtal>>7)&0x01); // uart0_send_string((char *)rx_buff); // memset(rx_buff,0,256); // // //获取传感器模拟量结果(有黑白值初始化后返回1 没有返回 0) // if(Get_Anolog_Value(&sensor,Anolog)) // { // sprintf((char *)rx_buff,"Anolog %d-%d-%d-%d-%d-%d-%d-%d\r\n",Anolog[0],Anolog[1],Anolog[2],Anolog[3],Anolog[4],Anolog[5],Anolog[6],Anolog[7]); // uart0_send_string((char *)rx_buff); // memset(rx_buff,0,256); // // } // // //获取传感器归一化结果(只有当有黑白值传入进去了之后才会有这个值!!有黑白值初始化后返回1 没有返回 0) // if(Get_Normalize_For_User(&sensor,Normal)) // { // sprintf((char *)rx_buff,"Normalize %d-%d-%d-%d-%d-%d-%d-%d\r\n",Normal[0],Normal[1],Normal[2],Normal[3],Normal[4],Normal[5],Normal[6],Normal[7]); // uart0_send_string((char *)rx_buff); // memset(rx_buff,0,256); // } // //经典版理论性能1khz,只需要delay1ms,青春版100hz,需要delay10ms,否则不能正常使用 // delay_ms(1000); /**************************************************校正灰度传感器解注释以上代码,校正后重新***********************************/ OLED_ShowNum(1,8,Gray_Sensor_Arry[7],1); OLED_ShowNum(1,7,Gray_Sensor_Arry[6],1); OLED_ShowNum(1,6,Gray_Sensor_Arry[5],1); OLED_ShowNum(1,5,Gray_Sensor_Arry[4],1); OLED_ShowNum(1,4,Gray_Sensor_Arry[3],1); OLED_ShowNum(1,3,Gray_Sensor_Arry[2],1); OLED_ShowNum(1,2,Gray_Sensor_Arry[1],1); OLED_ShowNum(1,1,Gray_Sensor_Arry[0],1); OLED_ShowNum(2,1,guai_count,4); D1 = Gray_Sensor_Arry[0]; D2 = Gray_Sensor_Arry[1]; D3 = Gray_Sensor_Arry[2]; D4 = Gray_Sensor_Arry[3]; D5 = Gray_Sensor_Arry[4]; D6 = Gray_Sensor_Arry[5]; D7 = Gray_Sensor_Arry[6]; D8 = Gray_Sensor_Arry[7]; OLED_ShowNum(2,1,you_zhi,1); KEY = DL_GPIO_readPins(KEY_PORT, KEY_PIN_21_PIN); OLED_ShowNum(3,1,quanshu,1); OLED_ShowNum(4,1,go_flag,1); if(KEY == 0) { delay_ms(10); if(KEY == 0) KEY_jici++; } else { if(KEY_jici >= 10) { if(KEY_jici <= 30) quanshu++; else go_flag = 1; } KEY_jici = 0; } if(you_zhi) { guai_count++; Motor_SetSpeed_L(200); Motor_SetSpeed_R(200); delay_ms(30); Motor_SetSpeed_L(250); Motor_SetSpeed_R(-220); delay_ms(100); you_zhi = 0; zhijiao_hou = 1; } if(zuo_zhi) { guai_count++; Motor_SetSpeed_L(200); Motor_SetSpeed_R(200); delay_ms(30); Motor_SetSpeed_L(-250); Motor_SetSpeed_R(260); delay_ms(110); zuo_zhi = 0; zhijiao_hou = 1; } } } uint32_t time_count = 0; void TIMER_A1_INST_IRQHandler(void) { switch( DL_TimerG_getPendingInterrupt(TIMER_1_INST) ) { case DL_TIMER_IIDX_ZERO://如果是0溢出中断 time_count++; if(zhijiao_hou) zhijiao_hou_cout++; if(zhijiao_hou_cout >= 1000) { zhijiao_hou = 0; zhijiao_hou_cout = 0; } /********************************灰度传感器读取**********************************/ Gray_sensor_data=0; No_Mcu_Ganv_Sensor_Task_Without_tick(&sensor); uint8_t digital_byte = Get_Digtal_For_User(&sensor); for (int i = 0; i < 8; i++) { Gray_Sensor_Arry[i] = (digital_byte >> i) & 0x01; } /********************************灰度传感器读取**********************************/ if(time_count >=5) { time_count = 0; if(you_zhi || zuo_zhi) return; if(guai_count >= (quanshu*4) || !go_flag) { Motor_SetSpeed_L(0); Motor_SetSpeed_R(0); return; } /********************************直角判断**********************************/ if(!zhijiao_hou) { /** if((D8 == 0 && D7 == 0 && D2 == 1 && D1 == 1) || (D8 == 0 && D7 == 0 && D1 == 1) || (D8 == 0 && D2 == 1 && D1 == 1) || (D8 == 0 && D1 == 1)) you_zhi = 1;**/ //(删除右转) if((D1 == 0 && D2 == 0 && D7 == 1 && D8 == 1) || (D1 == 0 && D2 == 0 && D3 == 0 && D8 == 1) || (D1 == 0 && D2 == 0 && D3 == 0 && D4 == 0 ) ) zuo_zhi = 1; /** if else (!zhijiao_hou) // 左转直角路口 { char tmp; do { return; // 执行左转动作 tmp = SearchSignal(); // 检测传感器信号 } while ((tmp != 1) && (tmp !=2)&&(tmp !=3)**/ } /********************************直角判断**********************************/ /********************************PID**********************************/ int D[15] = {D1, D1 && D2, D2, D2 && D3, D3, D3 && D4, D4, D4 && D5, D5, D5 && D6, D6, D6 && D7, D7, D7 && D8, D8}; int weight[15] = {-60, -35,-33, -28, -21, -14, -7, 0, 7, 14, 21, 28, 33 ,35,60}; int weighted_sum = 0; int active_count = 0; for (int i = 0; i < 15; i++) { if (D[i]) { weighted_sum += weight[i]; active_count+=1; } } xunPID_Error = weighted_sum / active_count; xun = p * xunPID_Error + d * (xunPID_Error - last); last = xunPID_Error; target_velocity_left = -xun + 250; target_velocity_right = xun + 250; Motor_SetSpeed_L(target_velocity_left); Motor_SetSpeed_R(target_velocity_right); } /********************************PID**********************************/ break; default://其他的定时器中断 break; } } void GROUP1_IRQHandler(void) { }

filetype

//实验名称: 运行实验--避障 //实验内容: 本实验接收手机蓝牙APP运行控制:前进、后退、左转、右转,叠加超声波测距避障功能。 // 主程序初始化指示灯、OLED、电机1编码器、电机2编码器、IIC、MPU6050、PWM、DMP、外部中断、UART3。 // 主循环中周期性显示小车运行模式和参数。 // 定时外部中断中实现编码器读取、IIC读取陀螺仪参数、电机运行参数的处理、LED闪烁控制。 // 串口3中断接收APP控制命令,修改电机运行标志,供定时外部中断处理电机运行使用。 // 定时器3捕获功能实现超声波捕获测距,定时处理用来小车运行中避障。 //操作方法:1,上电后使用“USER”按键开启和关闭小车平衡运行; // 2,打开手机APP连接蓝牙,在APP上操作控制小车运行; // 3,长按USER按键2秒以上,在“普通”和“避障”模式之间切换一次; // 4,避障模式前进时,遇到障碍向右转弯;静止时遇到障碍,向后运行至超出障碍范围。 #include "stm32f10x.h" #include "sys.h" /************************************************************************** 作者:中科深谷 **************************************************************************/ u8 Way_Angle=2; //获取角度的算法,1:四元数 2:卡尔曼 3:互补滤波 u8 Flag_Qian,Flag_Hou,Flag_Left,Flag_Right,Flag_sudu=2; //蓝牙遥控相关的变量 u8 Flag_Stop=1,Flag_Show=0; //停止标志位和 显示标志位 默认停止 显示打开 int Encoder_Left,Encoder_Right; //左右编码器的脉冲计数 int Moto1,Moto2; //电机PWM变量 应是Motor int Temperature; //显示温度 int Voltage =1110 + 110; //电池电压采样相关的变量 float Angle_Balance,Gyro_Balance,Gyro_Turn; //平衡倾角 平衡陀螺仪 转向陀螺仪 float Show_Data_Mb; //全局显示变量,用于显示需要查看的数据 u32 Distance; //超声波测距 u8 delay_50,delay_flag,Bi_zhang=0,PID_Send,Flash_Send; //延时和调参等变量 float Acceleration_Z; //Z轴加速度计 float Balance_Kp=300,Balance_Kd=1.7,Velocity_Kp=80,Velocity_Ki=0.4; //PID参数 u16 PID_Parameter[10],Flash_Parameter[10]; //Flash相关数组 u8 Uart_Ctrl_Flag = 0; u8 UartCount = 0; int main(void) { delay_init(); //=====延时函数初始化 //ST-LINK V2 仿真器只支持SWD接口,仿真连接后不能在线切换 //OLED 与JTAG接口公用PB3\PB4\PA15,OLED的使用需要关闭JTAG接口,释放出公用GPIO。 //即:仿真时注销下面两条指令,OLED不工作;只是下载时,打开下面两条指令,OLED正常工作 JTAG_Set(JTAG_SWD_DISABLE); //=====关闭JTAG接口 JTAG_Set(SWD_ENABLE); //=====打开SWD接口 可以利用主板的SWD接口调试 LED_Init(); //=====初始化与 LED 连接的硬件接口 KEY_Init(); //=====按键初始化 MY_NVIC_PriorityGroupConfig(2); //=====设置中断分组 MiniBalance_PWM_Init(7199,0); //=====初始化PWM 10KHZ,用于驱动电机 如需初始化电调接口 uart3_init(9600); //=====串口3初始化 ---蓝牙 OLED_Init(); //=====OLED初始化 Encoder_Init_TIM2(); //=====编码器接口 Encoder_Init_TIM4(); //=====初始化编码器 IIC_Init(); //=====IIC初始化 delay_ms(100); MPU6050_initialize(); //=====MPU6050初始化 DMP_Init(); //=====初始化DMP MiniBalance_EXTI_Init(); //=====MPU6050 5ms定时中断初始化 TIM3_Cap_Init(0XFFFF,72-1); //=====超声波初始化 while(1) { delay_flag=1; delay_50=0; while(delay_flag); //通过MPU6050的INT中断实现的50ms精准延时 Read_Distane(); //===获取超声波测量距离值 if(UartCount++ > 5) UartCount = 0, Uart_Ctrl_Flag = 0; //超过 5*50ms 没有收到控制信号,清除控制标志。 if(Bi_zhang==1&&Distance>BIZHANG_DIST && Uart_Ctrl_Flag==0&&Flag_Hou == 1) Flag_Hou = 0; //避免静止有障碍时一直向后。 //=============第一行显示LOGO=======================// OLED_ShowString(30,0,"Si Valley"); //=============第二行显示温度和距离===============// OLED_ShowNumber(0,10,Temperature/10,2,12); OLED_ShowNumber(23,10,Temperature%10,1,12); OLED_ShowString(13,10,"."); OLED_ShowString(35,10,"`C"); OLED_ShowNumber(70,10,(u16)Distance,5,12); OLED_ShowString(105,10,"mm"); //=============第三行显示编码器1=======================// OLED_ShowString(00,20,"EncoLEFT"); if( Encoder_Left<0) OLED_ShowString(80,20,"-"), OLED_ShowNumber(95,20,-Encoder_Left,3,12); else OLED_ShowString(80,20,"+"), OLED_ShowNumber(95,20, Encoder_Left,3,12); //=============第四行显示编码器2=======================// OLED_ShowString(00,30,"EncoRIGHT"); if(Encoder_Right<0) OLED_ShowString(80,30,"-"), OLED_ShowNumber(95,30,-Encoder_Right,3,12); else OLED_ShowString(80,30,"+"), OLED_ShowNumber(95,30,Encoder_Right,3,12); //=============第五行显示模式=======================// if(Bi_zhang==1) OLED_ShowString(40,40,"Bizhang"); else OLED_ShowString(40,40,"Putong "); //=============第六行显示角度=======================// OLED_ShowString(0,50,"Angle"); if(Angle_Balance<0) OLED_ShowString(45,50,"-"), OLED_ShowNumber(45+10,50,-Angle_Balance,3,12); else OLED_ShowString(45,50,"+"), OLED_ShowNumber(45+10,50,Angle_Balance,3,12); //=============刷新=======================// OLED_Refresh_Gram(); } } //实验名称: 自平衡控制实验 //实验内容: 本实验通过单位时间读取陀螺仪参数,运算并提供电机运行控制量,实现电机自平衡运行。 // 主程序初始化指示灯、OLED、电机1编码器、电机2编码器、IIC、MPU6050、PWM、DMP、外部中断。 // 主循环中周期性显示小车运动状态和参数。 // 外部中断中实现定时编码器读取、IIC读取陀螺仪参数、电机运行参数的处理、LED闪烁控制。 //操作方法:上电后使用“USER”按键开启和关闭小车平衡运行。 #include "stm32f10x.h" #include "sys.h" /************************************************************************** 作者:中科深谷 **************************************************************************/ u8 Way_Angle=2; //获取角度的算法,1:四元数 2:卡尔曼 3:互补滤波 u8 Flag_Qian,Flag_Hou,Flag_Left,Flag_Right,Flag_sudu=2; //蓝牙遥控相关的变量 u8 Flag_Stop=1,Flag_Show=0; //停止标志位和 显示标志位 默认停止 显示打开 int Encoder_Left,Encoder_Right; //左右编码器的脉冲计数 int Moto1,Moto2; //电机PWM变量 应是Motor int Temperature; //显示温度 int Voltage =1110 + 110; //电池电压采样相关的变量 float Angle_Balance,Gyro_Balance,Gyro_Turn; //平衡倾角 平衡陀螺仪 转向陀螺仪 float Show_Data_Mb; //全局显示变量,用于显示需要查看的数据 u32 Distance; //超声波测距 u8 delay_50,delay_flag,Bi_zhang=0,PID_Send,Flash_Send; //延时和调参等变量 float Acceleration_Z; //Z轴加速度计 float Balance_Kp=300,Balance_Kd=1.7,Velocity_Kp=80,Velocity_Ki=0.4; //PID参数 u16 PID_Parameter[10],Flash_Parameter[10]; //Flash相关数组 int main(void) { delay_init(); //=====延时函数初始化 //ST-LINK V2 仿真器只支持SWD接口,仿真连接后不能在线切换 //OLED 与JTAG接口公用PB3\PB4\PA15,OLED的使用需要关闭JTAG接口,释放出公用GPIO。 //即:仿真时注销下面两条指令,OLED不工作;只是下载时,打开下面两条指令,OLED正常工作 JTAG_Set(JTAG_SWD_DISABLE); //=====关闭JTAG接口 JTAG_Set(SWD_ENABLE); //=====打开SWD接口 可以利用主板的SWD接口调试 LED_Init(); //=====初始化与 LED 连接的硬件接口 KEY_Init(); //=====按键初始化 MY_NVIC_PriorityGroupConfig(2); //=====设置中断分组 MiniBalance_PWM_Init(7199,0); //=====初始化PWM 10KHZ,用于驱动电机 如需初始化电调接口 OLED_Init(); //=====OLED初始化 Encoder_Init_TIM2(); //=====初始化编码器2 Encoder_Init_TIM4(); //=====初始化编码器1 IIC_Init(); //=====IIC初始化 delay_ms(100); MPU6050_initialize(); //=====MPU6050初始化 DMP_Init(); //=====初始化DMP MiniBalance_EXTI_Init(); //=====MPU6050 5ms定时外部中断初始化 Init_Infrared_Gpio() ; while(1) { delay_flag=1; delay_50=0; while(delay_flag); //通过MPU6050的INT中断实现的50ms精准延时 //=============第一行显示LOGO=========================// OLED_ShowString(30,0,"Si Valley"); //=============第五行显示转向状态=======================// OLED_ShowString(10,40,"turn_dir"); OLED_ShowNumber(80,40,turn_dir,2,12); //=============刷新====================================// OLED_Refresh_Gram(); } } 将这两个整合在一起

斯里兰卡七七
  • 粉丝: 40
上传资源 快速赚钱