第十五届智能机器人大赛赛后总结
比赛硬件:
- 小车底座
- 小车核心板一块,母版一块,核心板一块,其中核心板c型车采用k66核心芯片,F型车采用tc264核心处理器
- 小车编码器左右后轮各一个,驱动电机两个,c型车包含舵机一个
- 红外避障传感器,两个编码器,电磁传感器。
编译软件
- c型车采用iar编译环境,注意文档提示使用8.2以上版本,否则会遇到程序无法下载的情况,iar自带jling驱动器,所以可以省略安装驱动部分,如果需要手动安装驱动器,注意安装过程中 要勾选将驱动器应用到 IAR 环境中
- iar 使用介绍
双击上图位置快速打开工程
打开工程后依次操作为
- 编译-》生成hex文件
- 选择项目名,右键-》options-》rebuildall
- 或者使用快捷键CTRL + F7
- 使用ARM-LINK烧写器连接K66核心板
- 略
-
烧写程序
project——》download——》
或者使用快捷键CTRL+D 然后点击全速运行 -
这样程序就烧写进去了,建议将案例程序都烧写进去观察一遍,注意程序中使用到两种屏幕连接方式一样,但不能通用。IAR程序安装于破都有专门文档这里不在赘述。
-
k66案例项目目录:
重点使用的有母版综合案例,上位机灰度案例(使用前要进行蓝牙配置,比赛中并没有应用,如果需要进行上位机通信使用),key案例,tf1.8案例,tf1.8灰度显示案例(在调节摄像头焦距时需要用到)
烧写过程中未出现错误表示程序下载正常,连接母版后可以运行了 -
tc264核心板采用ads移植环境,为tasking软件的替代品,如果使用下载时出现无法加载项目是正常现象,重复更换工作环境(所以启动程序时不要勾选设置默认的工作环境),重新导入工程,重启软件,重启电脑解决
如果需要使用tasking软件,一定要提前一个星期提交软件申请报告,一个星期审批后即可使用
- ads编译环境使用:
7.
8.
9.
项目导入后界面如图所示
cpu0_main()是程序主函数,你可以选择里面函数跳转
与iar使用方式基本相同使用步骤分别为
-
编译
-
连接烧写器(tc264核心板使用的是mini烧写器,需要注意)
略 -
烧写程序
选择正确核心板类型后点击debug及可烧写了 烧写完成后点击全速运行(建议修改少量代码不用重复编译容易出现项目无法加载的情况)
代码部分
链接:https://pan.baidu.com/s/15uxsDb80RAHI97m0M-6IEg
提取码:hyz1
复制这段内容后打开百度网盘手机App,操作更方便哦
主函数主要包括getout()以及Electromagnetictricycle();函数分别是出库以及循迹,切记!!!我在程序中是将出库写死,分别采用出库,打正,加速冲坡三个阶段,应该采用出库检测电磁或者磁块,打正加速的阶段,一定不要写死!!!
在这里插入代码片`void Electromagnetictricycle(void)
{
unsigned short duty=5000;
uint16 batv;
char txt[30]="X:";
/*
while(1)
{
MotorCtrl(1000, 1000);
}
*/
PIN_InitConfig(P15_8, PIN_MODE_INPUT, 1);
//PIN_Exti(P15_4, PIN_IRQ_MODE_FALLING);//配置P15_8 下降沿触发中断
`
循迹代码中使用了P15_8这个IO口用来给红外避障传感器提供输入,让小车完成接球后停在原地,循迹传感器供电5V,你可以在淘宝店找到接线说明以及检测距离调节。
if((Loffset1<200)&&(Loffset4<200)) //两个值都小于20,电磁杆远离赛道,进入直角弯和急弯
{ //数值越大,转弯越提前,速度越快该值应该越大
if((Loffset4<30)&&(Loffset1<30)) //冲出赛道,检测不到电感值时舵机需要打死
{
if(LastAngle<0) //上次右偏,根据冲出赛道前记忆的偏离方向打死舵机回赛道
{
TempAngle=Left_Max; //根据记忆参数打角舵机,向左打死
}
else //上次左偏,根据冲出赛道前记忆的偏离方向打死舵机回赛道
{
TempAngle=Right_Min; //根据记忆参数打角舵机,向右打死
}
}
else if(Loffset1>Loffset4) //左2电感值 大于 右2电感值
{
if(Loffset0>Loffset5) //并且 左1电感值 大于 右1电感值
TempAngle=Left_Max; //小车右偏,左打死
}
else if(Loffset4>Loffset1) //左2电感值 小于 右2电感值
{
if(Loffset0<Loffset5) //并且 左1电感值 小于 右1电感值
TempAngle=Right_Min; //小车左偏,右打死
}
}
else if((Loffset1>100)&&(Loffset4>100)) //小车行走于赛道上中间
{
TempAngle=(Loffset1-Loffset4)*25; //根据偏移量差值小幅度打角,防止直道摇摆
}
else //小车行走于赛道上弯道区域,需要控制转向
{
TempAngle=(Loffset1-Loffset4)*65; //一般弯道专项控制,数值越大,转向越早30
LastAngle=TempAngle;//记忆有效参数 //记忆偏移方向
}
g_Offset=TempAngle;
//#ifdef USE_ENCODER //使用编码器,需要定义USE_ENCODER
//车左偏,右侧电感值大,偏移值为负,左侧电机加速,右侧电机减速
//车右偏,左侧电感值大,偏移值为正,左侧电机减速,右侧电机加速
//MotorCtrl(2000+TempAngle+SPEED*Kencoder, 2000+TempAngle+SPEED*Kencoder);
if(TempAngle<Right_Min) TempAngle=Right_Min;
else if(TempAngle>Left_Max) TempAngle=Left_Max;
上图是小车循迹算法控制代码,使用到了电磁传感器,电磁传感器安装在车头大约十厘米高处,连接方式为 0-1,1-2,5-3,6-4, v-v,g-g可以对代码进行微调,通告修改上图参数
如果出现小车转向半径过大,你应该修改的位置为
其中kp越大,转向扭矩越小。
小车硬件连接图:
小车点击接线无正负要求,反接反转根据代码灵活应用,注意编码器左边使用编码器1接口右边编码器2接口