第一周伊始,我们在8月20号导师介绍了基于Arduino的Pokemon Challenge任务要求。我们需要组装以L298N双路电机驱动以及ARDUINO Uno主板为主体的循迹车平台,使用四路循迹传感器实现在指定的地图上循迹的功能,使用避障传感器以及超声波测距传感器实现防止碰撞以及物体定位的功能,使用灰度传感器识别地图上的色块颜色。我在第二天完成了硬件的组装,按照程序定义的引脚完成了接线。我的想法是程序应依据初始化时灰度传感器所识别的颜色信息进入不同的路径程序分支,分为红,绿,青,蓝四条线,然后按具体路线完成循迹并在重点抓去物体。循迹的逻辑就是实时调整电机转速实现微转向,哪边的传感器测到黑线,小车就要往哪边转向,当没有传感器检测到黑线时保持直行。我将小车的各个动作对应的左右电机PWM数值(速度)储存在数组里,按照传感器反馈的判断条件调取,实现实时动作。在调试中我按直行,转向以及停止动作的顺序依次调节PWM参数,使得小车有较好的动作效果,然后将动作和任务依次封装在函数中,在主函数里依据传感器的反馈依次进行调用。


在第二周的Meeting上,导师介绍了ROS以及Raspberry Pi的基本知识,给出了用基于Raspberry Pi上的Linux(Ubuntu)系统安装配置ROS(Kinetic Kame),建立Joints-links组成三个自由度的机械臂模型,并使用RViz可视化工具显示该模型。通过Joint state publisher控制各个关节舵机的角度,使机械臂按照模型的显示来进行运动。

在调试中我遇到过当进行ROS与ARDUINO通信查找串口号不成功的问题,只需要将串口检查命令改为ls /dev/ttyUSB*即可,若命令窗口显示黄色错误提示/dev/ttyUSB0 拒绝访问,此时我们就需要对USB的权限进行设置,可以输入sudo chmod a+rw /dev/ttyUSB0 命令。


第三周我们进行了Literature Review的presentation。我所进行的课题是perception,重点以Simultaneous Localization and Mapping(SLAM)进行展开。介绍了一种成熟的实现方法:Graph SLAM以及不稳定环境下的改进SLAM方案:Dynamic SLAM。同时我开始了主题为Piezo Hysteresis Compensation的Advanced project。在前期我先试图依据PI公司旗下型号为P-883.51的Piezo Actuator的Datasheet进行建模。搜索了诸多领域内的论文,我发现基础模型Mass Spring Damper System就有不错的拟合效果,其中stiffness为100N/μm,blocking force为800N。同时我使用LABVIEW软件完成了Pong game控件程序框图的编写,成功实现了慢速的对打以及计分功能。


第四周我每天早上到学校去旁听Computer Vision和Python的课程,同时下午和晚上继续进行关于Piezo Hysteresis Compensation的Advanced project。这一周我开始对Piezo Actuator的磁滞特性进行了建模,其表现为前一输入电压所产生的微位移结果会对后一输入电压产生的微位移结果产生影响,使得控制的结果并不想我们所期望的线性输出的曲线,我们在对这一现象进行建模之后需要对其进行补偿以抵消磁滞现象所带来的控制误差。在相关论文中较为著名的是Preisach Model,其基本的原理是通过许多微小的滞回发生器进行叠加,当叠加数量达到12600左右时所插补出来的曲线就近似于真实的磁滞曲线。我用MATLAB,通过求解关于前后输入电压的权函数,在限制三角形内进行积分,成功地在MATLAB画出的GUI界面中,画出了该Piezo Actuator的磁滞特性电压—位移曲线。同时在9月11号我跟老师进行了最后一次见面,向他请教了关于建模当中damper参数调整的方法以及关于更为复杂的磁滞模型Prandtl–Ishlinskii model。通过与老师的探讨,Prandtl–Ishlinskii model是在preisarch model的基础上将滞回发生器的激活突变过程转化成为一次函数的递增过程,使得在输入电压连续变化时,输出位移有着更好的变化拟合过程,同时积分计算也会变得较为复杂。后期计划将用MATLAB中的simulink模块替代原先单纯用权重积分算法进行数值实现的过程,以实现真正的控制补偿模拟。