本帖最后由 电赛小编 于 2019-4-11 17:43 编辑
1、RSLK套件组成。 这套小车的动力系统由电池、电机驱动板、直流电机和轮胎组成、传感系统由6个碰撞传感器、线传感器、转速计组成。控制器为一块搭载MSP432P401R芯片的控制器。硬件资源很丰富,将所有部件按照说明书组装完成后,实物图如图所示。 在官网上下载的资料包中,包括了整套开发套件的数据手册、芯片编程指南、开发平台使用手册等资料,同时网上也有相关的视频教程,对控制器和传感器的原理都有很详细的介绍,配套的TExaSdisplay软件可以实现对信号的分析,让使用者能对各个IO口的信号能有很直观的理解。对于初学者而言,是很不错的学习资料。 在课程配套的软件包中的TExaSdisplay软件很好用,可以在没有示波器的情况下配合MSPEXP432P401R LaunchPad的上的调试器,完成对端口状态的监视。电机运行的示波器图如下。 2、运动学分析 小车的机械尺寸上,轮子的直径约为68mm。两轮中心的间距约为130mm,两轮中心距底盘中心的间距约为65mm。 首先,假设小车所在的平面是二维的,小车在该平面内的的位置可以表示为q(θ,x,y)其中 为小车的姿态角θ, 为小车的位置(x,y)。 wL为小车左轮的转速,wR为小车右轮的转速。r为车轮半径。 上述公式对时间积分,可以得到
在编程时,我们将单个控制周期内的编码器的变化值视为速度与时间的微分量,实现对上述公式的离散化。离散化的代码如下 eright_lsteps=RightSteps;//获取上一次的编码器累计数值 eleft_lsteps=LeftSteps; encoder_Get(&LeftTach, &LeftDir, &LeftSteps,&RightTach, &RightDir, &RightSteps);//获取当前的编码器累计数值 edelta_l=LeftSteps-eleft_lsteps;//计算编码器的变化值 edelta_r=RightSteps-eright_lsteps; ecart_theta+=(edelta_r-edelta_l)*0.554/130;//计算角度值 ecart_x+=0.5*edelta_l*0.554*cos(ecart_theta)+0.5*edelta_r*0.554*cos(ecart_theta);//计算X位置值 ecart_y+=0.5*edelta_l*0.554*sin(ecart_theta)+0.5*edelta_r*0.554*sin(ecart_theta);//计算Y位置值 3、实验 实验为小车先根据编码器的反馈值,计算小车当前的位姿,以此为依据来控制小车运行大约800mm,图片中的瓷砖边长为800mm。 然后切换到小车的循迹模式,根据线传感器的反馈,判断小车偏离地上的标线的程度,调整小车的运行速度。 实验中发现,由于小车的万向轮与地面之间有时会发生滑动,从而导致小车发生偏移,导致小车无法按照预定的轨迹运行。 4、测评总结 经过一个月的学习,我从中学到了很多东西,很多在理论上行的通的做法,在实际使用时会受到很多因素的干扰,需要通过采集外部信息来对小车的运行状态进行调整。另外通过编码器计算小车的位置,控制小车的运动,控制效果不是很好,原因是多方面的,一方面由于地面的平整度和小车运行时的滑动造成的,做出来的效果不是很好,一方面是模型存在一些问题,参数、控制周期等的影响。 在项目开始时,我还打算使用小车根据自身的位姿计算控制其进行圆弧运动,但是最后发现实施起来难度大,而且电机的转速也不是很稳定,加上地面的条件不好,小车常打滑,导致小车无法走出理想的圆。这让我切身体会到硬件和软件的配合对实际控制有很重要的影响。 最后,感谢TI提供的这次试用机会,祝电赛论坛和TI越办越好! |