【TI-RSLK 试用报告】+迷宫机器人

[复制链接]

1

主题

1

帖子

59

积分

一粒轻沙

Rank: 1

积分
59
查看: 5306回复: 2 发表于 2019-3-5 20:36:51   只看该作者
本帖最后由 电赛小编 于 2019-4-11 17:43 编辑

一、材料清单
硬件组件:MSP432P401R核心板、电源模块、电机驱动模块、编码减速电机组、红外遥控接收模块、红外测距传感器
软件:cloud composer Studio
工具:3D打印机、激光切割机、抛光机、电钻
二、项目介绍
本机器人组件作为一个基础版的迷宫机器人,可实现的功能相对有限,而且提供的东西比较有限,但是在板子是MSP432,是非常强大的32单片机,可以随意添加各种模块,我们在后期尝试加入**,MPU6050,蓝牙,超声波。选择该项目其实有很多原因,之前我们接触过51单片机,STM32单片机,K60,但是唯独没有接触过MSP系列单片机,所以非常想尝试接触一下。另外呢,今年我们准备参加河南省大学生机器人大赛迷宫组,包括车模的制作、程序的书写,硬件的制作,之前从未有过了解,在山穷水尽之时,TI恰逢其时伸出援助之手,千里送珍宝,礼轻情意重,在此再次感谢TI。项目的过程可谓一波三折,但是我们发扬了不放弃不抛弃的精神,废寝忘食,攻关克难,克服重重困难,攻占一座又一座堡垒,占领一座又一座堡垒。首先是组装,这肯定没啥难度,装不起来还玩啥,但是在这有点意见提一下,作为迷宫鼠,我感觉车子有点偏大,河南省机器人大赛以及其他比赛来看,车子都是小而精致的,所以在这里提供一下建议,车子应该再缩小点,(可能专家考虑到教学问题)。组装完毕就可以正式写程序调试了,但是问题来了,应该选择哪种编译软件呢,官方推荐CCS,但是我们觉得Keil也可以,而且电脑上本啦就有,可以省去下载的时间,但是我们找了好久,实在是找不到库,那没办法用寄存器版本吧,虽然比较麻烦,但是问题又来了,给的文档里边没有原理图,在群里问其他人有没有,大家都没有,后来在视频里找到了,只能在视频里截图保存,原理图搞定了,程序就好写了,下载时却下不进去,搞了好几个小时也没搞好,就是找不到原因,后来无奈换成CCS,但是这个CCS更折磨人,安装时有一个毛病,就是要把电脑里面的杀毒软件全部卸掉,否则安装不上,但是卸了却还是显示没卸掉,真是折磨人啊,后来用了cloud composer Studio,虽然有点卡,但是起码能用,能凑活。第一,要让电机跑起来,必须了解电机驱动相关原理,只需要给电机高低电平就可以了。
第二就是PWM波了,PWM脉宽调制,是靠改变脉冲宽度来控制输出电压,通过改变周期来控制其输出频率。而输出频率的变化可通过改变此脉冲的调制周期来实现。这样,使调压和调频两个作用配合一致,且于中间直流环节无关,因而加快了调节速度,改善了动态性能。由于输出等幅脉冲只需恒定直流电源供电,可用不可控整流器取代相控整流器,使电网侧的功率因数大大改善。利用PWM逆变器能够抑制或消除低次谐波。加上使用自关断器件,开关频率大幅度提高,输出波形可以非常接近正弦波。第三就是红外循迹了,红外寻迹原理其实很简单,利用判断黑白线来完成寻迹,红外光有一个反射特性。但对于不同的物体反射特性是不同,特别是对白色反光的物体,红外光的反射量将会多一点。而对黑色不反光的物体,红外反射量将会大量的减少。那么我们就可利用这个特性来完成黑与白的判断。在程序上,
1. 利用黑色对光线的反射率小这个特点,当平面的颜色不是黑色时,传感器发射出去的红外光被大部分反射回来。于是传感器输出低电平0。

2. 当平面中有一黑线,传感器在黑线上方时,因黑色的反射能力很弱,反射回来的红外光很少,达不到传感器动作的水平,所以传感器输出1。

3.我们只要用单片机判断传感器的输出端是0或者是1,就能检测到黑线。

红外循迹刚开始调试时也遇到很多问题,第一,车子并没有识别到黑线,不按黑线走。第二,车子按黑线走了,但是走走就跑出黑线了。后来经过讨论我们解决了这两个问题,没有识别到黑线,使我们忽略了光干扰这个问题,当时测试时正值中午,光线特别强,但到了下午在测试时,小车走的很好,顺利寻黑线。
第二个问题是PWM波的问题,我们把车速调的太高,以至于车的识别反应时间赶不上车速,车子直接冲出去。
第四就是碰撞开关了,碰撞开关的原理非常简单,完全依靠内部的机械结构来完成电路的导通和中断,当碰撞开关的外部探测臂受到碰撞,探测臂受力下压带动碰撞开关内部的簧片拨动,从而电路的导通状态发生改变。
第五就是红外避障了,1. 利用障碍物对光线的反射特点,当前面的有障碍物时,传感器发射出去的红外光被大部分反射回来。
2. 当前面中没有障碍物时,传感器在小车上方,因为远距离物体反射后的信号很弱,反射回来的红外光很少,达不到传感器动作的水平,所以传感器输出1。
3. 我们只要用单片机判断传感器的输出端是0或者是1,就能知道是否检测到障碍物,进行避障
第六就是红外遥控,这是所有里面最难得,要知道这两个问题1.理解红外发射的信号调制和解调2.掌握NEC协议编码及解码,这个比较麻烦就看代码吧!



自己diy部分,主要用了MPU6050,**
对于MPU6050,主要是实现姿态解算,我们把万向轮给拆了,车子变成自平衡小车,首先MPU6050采集x/y/z轴的加速度等数据,经过DMP姿态解算最终得出俯仰角,然后再用PID控制算法进行负反馈,是小车实现平衡。但是最终由于电机,还有车子本身结构的限制,凭借程序无法做到平衡。
对于**,我们要对采集到的图像进行处理,首先进行灰度化,由于只是识别黑白,所以不需要边缘检测,可直接进行二值化,**识别黑线,车子延黑线前进。

其他:
最终项目难度:中级
最少1个月[img]D:\MobileFile[img]D:\MobileFile[img]D:\MobileFile[img]D:\MobileFile[img]D:\MobileFile
  1. #include "msp.h"


  2. /**
  3. * main.c
  4. */

  5. void delay_us(int n)
  6. {
  7.     int a;
  8.     for(a=0;a<n;a++);
  9.    
  10. }
  11. void delay(int n)
  12. {
  13.     int a,b;
  14.     for(a=0;a<n;a++)
  15.         for(b=0;b<100;b++);
  16. }
  17. void Photosensor_Init()
  18. {
  19.     P5DIR  |= BIT3;
  20.         P5OUT  |= BIT3;
  21.     P7DIR  &=~ BIT0;
  22.         P7DIR  &=~ BIT1;
  23.         P7DIR  &=~ BIT2;
  24.         P7DIR  &=~ BIT3;
  25.         P7DIR  &=~ BIT4;
  26.         P7DIR  &=~ BIT5;
  27.         P7DIR  &=~ BIT6;
  28.         P7DIR  &=~ BIT7;
  29.         
  30. }
  31. void Motor_Init()
  32. {
  33.    
  34.     P2DIR  |= BIT6;
  35.         P2OUT  &=~ BIT6;
  36.         P2DIR  |= BIT7;
  37.         P2OUT  &=~ BIT7;
  38.         
  39. }

  40. void Motor_L1();
  41. void Motor_R1();
  42. void Motor_L2();
  43. void Motor_R2();

  44. void LED_Init()
  45. {
  46.    
  47.     P2DIR  |= BIT0;
  48.         P2OUT  &=~ BIT0;
  49.         P2DIR  |= BIT1;
  50.         P2OUT  &=~ BIT1;
  51.         P2DIR  |= BIT2;
  52.         P2OUT  &=~ BIT2;
  53.    
  54. }
  55. void Drop_shutter_Init()
  56. {
  57.     P4DIR  &=~ BIT7;
  58.         P4DIR  &=~ BIT6;
  59.         P4DIR  &=~ BIT5;
  60.         P4DIR  &=~ BIT0;
  61.         P4DIR  &=~ BIT3;
  62.         P4DIR  &=~ BIT2;
  63. }

  64. int Route_Feedback()
  65. {
  66.    
  67.     P7DIR |= BIT0;
  68.     P7DIR |= BIT1;
  69.     P7DIR |= BIT2;
  70.     P7DIR |= BIT3;
  71.     P7DIR |= BIT4;
  72.     P7DIR |= BIT5;
  73.     P7DIR |= BIT6;
  74.     P7DIR |= BIT7;
  75.    
  76.     P7OUT |= BIT0;
  77.     P7OUT |= BIT1;
  78.     P7OUT |= BIT2;
  79.     P7OUT |= BIT3;
  80.     P7OUT |= BIT4;
  81.     P7OUT |= BIT5;
  82.     P7OUT |= BIT6;
  83.     P7OUT |= BIT7;
  84.    
  85.     delay(10);
  86.    
  87.     P7OUT &=~ BIT0;
  88.     P7OUT &=~ BIT1;
  89.     P7OUT &=~ BIT2;
  90.     P7OUT &=~ BIT3;
  91.     P7OUT &=~ BIT4;
  92.     P7OUT &=~ BIT5;
  93.     P7OUT &=~ BIT6;
  94.     P7OUT &=~ BIT7;
  95.    
  96.     delay(750);
  97.    
  98.     return P7IN;
  99.    
  100. }



  101. void main(void)
  102. {
  103.         WDT_A->CTL = WDT_A_CTL_PW | WDT_A_CTL_HOLD;                // stop watchdog timer0
  104.         
  105.         LED_Init();
  106.         
  107.         Motor_Init();
  108.         
  109.         Drop_shutter_Init();
  110.         
  111.         Photosensor_Init();
  112.         
  113.         int a;
  114.         delay_ms(2000);
  115.         
  116.         P2OUT |= BIT6;
  117.         P2OUT |= BIT7;
  118.         
  119.         while(1)
  120.         {
  121.             if((Route_Feedback()>0x3f)&&(Route_Feedback()<0x78))
  122.             {
  123.                 Motor_L1();
  124.             }
  125.             if((Route_Feedback()<0x3f)&&(Route_Feedback()>0x1e))
  126.             {
  127.                 Motor_R1();
  128.             }
  129.             if(Route_Feedback()>0x78)
  130.             {
  131.                 Moter_L2();
  132.             }
  133.             if(Route_Feedback()<0x1e)
  134.             {
  135.                 Moter_R2();
  136.             }
  137.             if(Route_Feedback()==0)
  138.             {
  139.                 break;
  140.             }
  141.            
  142.         }
  143.         
  144.         while(1);
  145. }[img]D:\MobileFile[img]D:\MobileFile[img]D:\MobileFile[img]D:\MobileFile[img]D:\MobileFile[/img][/img][/img][/img][/img]
复制代码
[/img][/img][/img][/img][/img]

组装

组装
2345_image_file_copy_1.jpg

73

主题

469

帖子

1007

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1007
发表于 2019-7-5 14:05:58   只看该作者

代码精简了很多~

0

主题

21

帖子

22

积分

一粒轻沙

Rank: 1

积分
22
发表于 2019-7-21 14:22:53   只看该作者
shengxiang 发表于 2019-7-5 14:05
代码精简了很多~

谢谢楼主分享!
快速回复 返回顶部 返回列表