Noi2011 : 智能车比赛】的更多相关文章

Description 新一届智能车大赛在JL大学开始啦!比赛赛道可以看作是由n个矩形区域拼接而成(如下图所示),每个矩形的边都平行于坐标轴,第i个矩形区域的左下角和右上角坐标分别为(xi,1,yi,1)和(xi,2,yi,2). 题目保证:xi,1<xi,2=xi+1,1,且yi,1< yi,2,相邻两个矩形一定有重叠在一起的边(如图中虚线所示),智能车可以通过这部分穿梭于矩形区域之间. 选手们需要在最快的时间内让自己设计的智能车从一个给定的起点S点到达一个给定的终点T点,且智能车不能跑出赛…
假设S在T左边,那么只能往右或者上下走 f[i]表示S到i点的最短路 f[i]=min(f[j]+dis(i,j)(i能看到j)) 判断i能看到j就维护一个上凸壳和一个下凸壳 时间复杂度$O(n^2)$ 代码写的有点长… #include<cstdio> #include<cmath> #include<algorithm> #define N 2010 using namespace std; struct P{int x,y;P(){}P(int _x,int _y…
/* 可以发现, 最优路径上的所有拐点, 基本上都满足一定的性质, 也就是说是在矩形上的拐角处 所以我们可以把他们提出来, 单独判断即可 由于我们提出来的不超过2n + 2个点, 我们将其按照x坐标排序, 这样就只能单方向走 n^2枚举判断两个点之间能不能直接走, 然后连边DAGdp即可 */ #include<cstdio> #include<algorithm> #include<cstring> #include<queue> #include<…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2433 http://221.192.240.123:8586/JudgeOnline/showproblem?problem_id=1668 [题目大意] 题目已经讲得很清楚了 防剧透 防剧透 防剧透 防剧透 防剧透 防剧透 防剧透 防剧透 防剧透 [解题思路] 首先可以发现一个性质:路径的转折点只能在矩形的顶点上.这个可以用任意三角形内一点到两顶点的距离<另一点到这两顶点的距离来证…
过了这题我就想说一声艹,跟这个题死磕了将近6个小时,终于是把这个题死磕出来了.首先看到这个题的第一反应,和当初做过的一个房间最短路比较相似,然后考虑像那个题那样建边,然后跑最短路.(具体建边方法请参考那个题,这个题比那道的建边还要简单一点).然后考虑的可能的点的数目比较多(有最多4000)个,于是就使用各种方法缩减建边的时间(优化后大概要O(N^2\*log(n)))左右.其实也是数据没仔细卡,要不然确实光建边就会T.但是那样的点有特判方法可以做出来...所以我就赌它没有.事实证明确实没有. 建…
题解 显然是个\(n^2\)的dp 我们要找每个点不穿过非赛道区域能到达哪些区域的交点 可以通过控制两条向量负责最靠下的上边界,和最靠上的下边界,检查当前点在不在这两条向量之间即可,对于每个点可以\(O(n)\)求出来哪些点是可以到达的 之后dp即可 注意判断S点所在区域的时候需要找靠后的那个区域-- 代码 #include <iostream> #include <algorithm> #include <cstdio> #include <cstring>…
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2433 题意:若干个矩形排成一排(同一个x之上最多有一个矩形),矩形i和i+1相邻.给定两点S和T,两点均在矩形内.求S到T的最短路径.只能在矩形内部走. 思路:首先,S到T若有转弯,必定是在矩形 的顶点处转弯.因此,只要建立任意两可达顶点(包含S和T)之间距离求最短路即可.若暴力枚举任意两点再判是否可达复杂度O(n^3).优化.枚举起点 a,从左向右扫遍矩形,利用叉积维护关于该点a的上…
一.中断函数注册方法: 1.格式: 配置某个功能的中断 注册中断函数 开启中断 2.一个例子 pit_init_ms(PIT0,);//定时中断初始化 set_vector_handler(PIT0_VECTORn ,PIT0_IRQHandler); //设置PIT0的中断服务函数为 PIT0_IRQHandler enable_irq (PIT0_IRQn);   二.ADC模块 1.ADC通道管脚对应表 typedef enum { // -------------------------…
(图片仅为示例,并不一定固定为这种造型) 第十二届全国大学生智能汽车竞赛有一个分项是光电四轮车的竞速(任务A),Seven她们组采购到的配件使用了freescale Crotex-M4内核的CPU,TSL1401 CCD摄像头进行道路识别,从网上搜索了一下,应当是K60平台的的一个变种方案. 这个方案基本平台使用IAR系统开发编译.调试及烧录.IAR其实是一个很昂贵的系统,还好这次真的是纯粹的教学需求,经由<计算机软件保护条例>第十七条的豁免说明,这次用一下破解版. 原厂提供的DEMO程序没有…
[sky第二期--PID算法] 想学PID的可以来[智能车论坛]这里有我发布的资料http://bbs.tekbots.eefocus.com/forum.php?mod=viewthread&tid=213301&fromuid=108990 欢迎交流…
对已经具备一定Linux基础的人来说,树莓派学习起来应该非常简单自然.在他们眼中,树莓派就是一个简易版的,卡通版的Linux而已.但是对我这样一个早已习惯微软技术生态系统的人或者初学者来说,要实现一个简单程序的编写.编译到运行,还是不太容易的. 上图是我搭建的一个相对完整的树莓派开发环境,有显示(HDMI转VGA->7寸显示屏800*480),有键盘和鼠标等,当然这些不是必须的,只是对初学者来说,显的比较直观. 为了降低学习和开发难度,树莓派上提供多种编程语言选择,比如Python.Java.C…
在上一篇<遥控篇>文章中,我们介绍了Sony PS2手柄信号的采集和编程,通过简单的封装,以事件的方式向我们提供按键信息.本篇文章主要介绍.NET Micro Framework系统接受到按键信息后,如何驱动小车马达和控制机械手的. 无论是驱动小车马达还是控制机械手,都是通过输出PWM来控制的,只是控制PWM输出的方式有些不同而已,我们先介绍一下小车马达的控制. 由于驱动马达需要相对比较大的电流,所以主芯片的IO是无法直接驱动的,中间需要连接一个驱动器.也就是说主芯片输出PWM控制驱动器,由驱…
树莓派是最近比较火热的开源硬件,其设备只有信用卡大小,运行着Linux系统,专为学生编程教育而设计.我十多年的技术路线基本以学习微软的技术为主,中间也曾试图学习过linux,但是相对陡峭的学习曲线,只好让我放弃了.最近几年深入研究嵌入式系统,自然绕不过去linux学习这个坎.幸好有了树莓派,一是让人容易滋生学习的兴趣:二是全球范围内网友技术交流,便于问题的定位和解决:所以在学习的过程中,慢慢地解开了linux的神秘面纱,使得有机会一探linux设计架构之美. 以前用.NET Micro Fram…
      因为毕竟是竞赛,跟学校挂钩,没办法开源代码和算法完成思路,所以不能详细写太多,如果可以等价交换的话,应该还是可以向领导申请一下的.       在厦大信科通信系,参加这个比赛,大家都觉得性价比太低,毕竟这个系,学霸太多,能力太强,课程多,分数还必须要高,如果参加这种要花大半年的时间来准备,但是却只能抱着不确定性拿奖的比赛,对于那些拼保研名额的同学简直有点太过于奢侈.所以基本上选择了创客类比赛,电子设计竞赛,ACM,数学建模,这些短周期的比赛.其实我也纠结了很久,其实,本来我也就是简简…
一.经典PID控制       使用遇限反向PID会比较适合有加减速的车子,使用变速积分适合跑匀速的车子.然后这种方法的条件下,一定要尽可能缩短控制周期..   二.PID加棒棒控制       针对C车,因为电机太弱了.所以可以使用棒棒进行加减速可以有效的提升车子性能.一般推荐控制周期10ms   三.模糊控制…
一.为何要追求软连接?       车子进行软连接之后,可以达到一种效果,就是在高速过程中,车子如果快要发生侧翻的时候,只会跳一个后轮,且只是轻微,而前轮如果进行的内倾,就可以让前轮最大面积接触,增大摩擦力,在这种调节下,可以保持高速而不会翻车,且不会减速,增加过弯速度.然后还有在过陂的时候,可以有减震的作用(说到底就是C车电机太差了 = = ).       但存在一种情况..电机过分差的时候..速度无法过高,否则的话直接翻车,比赛结束.       经过个人的分析比对,参考上届的国特学长,以…
一.C车电机选择 1.摘要:      因为C车模在四轮车的优势是有两个电机,可以进行主动差速,劣势是电机太弱了....所以如何选择电机,就是个钱的问题了,电机多一点,就比较好选,但是C车电机跑多了就会变的很弱很弱.所以请准备好钞票. 2.选择方法: (1) 使用恒流源,配合单片机程序,测试出,对应电压的电流和转速,一般采样10个点即可,正反转都要   (2)使用Matlab进行相关性拟合(以电压和电流为输入),转速为输出,得到  cnt = a * V + b * I   中a和b的参数(正反…
一.舵机的结构      舵机简单的说就是集成了直流电机.电机控制器和减速器等,并封装在一个便于安装的外壳里的伺服单元.能够利用简单的输入信号比较精确的转动给定角度的电机系统.舵机安装了一个电位器(或其它角度传感器)检测输出轴转动角度,控制板根据电位器的信息能比较精确的控制和保持输出轴的角度.这样的直流电机控制方式叫闭环控制,所以舵机更准确的说是伺服马达,英文servo.   二.舵机的规格和选型      舵机的规格主要有几个方面:转速.转矩.电压.尺寸.重量.材料等.我们在做舵机的选型时要对…
一.代码展示 1.头文件: #ifndef OLED_H_ #define OLED_H_ extern unsigned char Draw[]; extern const unsigned char Font_8x16[]; ]; extern const unsigned char Map[]; /*--------------------*OLED写数据*--------------------*/ void OLED_Write_Data(unsigned char Data); /*…
智能,但不完全智能 虽然我不觉得这玩意儿有啥智能的,但都这么叫就跟着叫喽. 时隔好几天才写的 其实在写这篇博文的时候我已经在做升级了,并且已经到了中后期阶段了. 主要是业余时间做着玩,看时间了. 规格 & 实拍 ESP32 远程控制 两驱动轮+一万向轮 所需硬件 继电器*4 或 双路电机2驱动模块 *1 电机*2 轮子*2 万向轮*1 电源*1 MCU *1 导线若干 (我就是因为没买够线只能用杜邦线了) -- 推荐使用电机驱动模块,或者自己用mos管. 直接使用双路继电器控制的缺点有: 体积大…
一.CCD为何要交叉摆放?       首先使用横线摆放,CCD前瞻如果远一点,弯道丢线,再远一点直接窜道.所以需要很多很多代码的工作量,而且过弯的过程相当于没有任何的调节过程,就是一个偏差保持,或者就是根据前面拟合(三次样条效果可以),但是终究是盲跑,写得好就跑的好,写不好各种窜道,各种问题.       其次可能会想到加个舵机做摇头CCD,想法很好,就是会重了那么一点点,就是会很容易不对称,就是可能不能加前瞻.       最后,综合以上两种思路,可以做一个交叉摆放的CCD支架.使用成熟的3…
一.使用硬件 1.兰宙CCD四代      优点:可以调节运放来改变放大倍数      缺点:使用软排线(容易坏),CCD容易起灰,需要多次调节   2.野火K60底层     二.CCD硬件电路 (1)积分电路:使用一个运放,加上配合的电阻以及电容搭配程的积分电路 (2)放大器:使用运放构成一个线性放大器 (3)滤波器:     三.CCD使用K60进行采集 1.概述        使用类I2C通信,可以使用2个IO口进行模拟,然后一个AD口进行采集 2.端口 3.驱动采集代码:…
一.头文件: #ifndef __MK60_GPIO_H__ #define __MK60_GPIO_H__ #include "MK60_gpio_cfg.h" /* * 定义管脚方向 */ typedef enum GPIO_CFG { //这里的值不能改!!! GPI = , //定义管脚输入方向 GPIOx_PDDRn里,0表示输入,1表示输出 GPO = , //定义管脚输出方向 } GPIO_CFG; #define HIGH 1u #define LOW 0u exter…
一.手册代码以及图示 二.流程说明 1.角度计算函数说明 //============================================================================ //函数名称:void AngleCalculate(void) //函数返回:无 //参数说明:无 //功能概要:车身角度计算. //==========================================================================…
一.直立行走任务分解 1.任务分解 (1) 控制车模平衡:通过控制两个电机正反向运动保持车模直立平衡状态 (2) 控制车模速度:通过调节车模的倾角来实现车模速度控制,实际上最后还是演变成通过控制电机的转速来实现车轮速度的控制.(3) 控制车模方向:通过控制两个电机之间的转动差速实现车模转向控制. 三个分解后的任务各自独立进行控制.由于最终都是对同一个控制对象(车模的电机)进行控制,所以它们之间存在着耦合.为了方便分析,在分析其中之一时假设其它控制对象都已经达到稳定. 二.车模平衡控制 1.平衡控…
一.学习说明 感觉就是配置I2C通信,然后直接移植51代码... 二.代码分享: 1.头文件: #ifndef I2C_GYRO_H_ #define I2C_GYRO_H_ /***********函数声明***********/ extern void Gyro_Init(void); extern void Read_GY(void); /*****************************/ /***********全局变量声明***********/ extern float G…
一.驱动说明: 就是使用I2C的通信方式驱动这款加速度计就行了,代码的话选择使用51单片机的代码进行移植. 二.代码分享: 1.头文件: #ifndef MMA8451_H #define MMA8451_H /***********函数声明***********/ void MMA8451_Init(void); void Read_Gray(void); /*****************************/ /***********全局变量声明***********/ extern…
一.代码分享 1.头文件 #ifndef __MENU_H #define __MENU_H /***********宏定义************/ //页面声明 typedef enum Menu_Page_Enum { MainMenu = , SubMenu1 = , SubMenu2 = , SubMenu3 = , SubMenu4 = , SubMenu5 = , SubMenu6 = } Menu_Page_Enum; //页面位置声明 #define OLED_TOP 0 #d…
一.原理说明 就是按键矩阵代码书写的一个说明,就是讲K5到K7先输出高电平,而K1和K4则调成上拉输入,如果检测到K1到K4有一个变为0,说明有按键按下去,立刻进行转换,是的K1到K4设置为输出高电平,然后读取K5到K7为上拉输入,然后再读取到为0的点,通过这两个数据就能确定按下了那个按键. 二.基于KVL25代码书写: 1.头文件 #ifndef __KEYSQUARE_H #define __KEYSQUARE_H /***********宏定义************/ #define k…
一.代码共享: 1.dac.h #ifndef DAC_H_ #define DAC_H_ #include "common.h" // 2.2 DAC控制寄存器0 位定义 #define DAC_DISABLE 0x00 //禁止DAC #define DAC_ENABLE DAC_C0_DACEN_MASK //使能DAC #define DAC_SEL_VREFO 0x00 //参考电压1选择 #define DAC_SEL_VDDA DAC_C0_DACRFS_MASK //参…