美文网首页机器学习与数据挖掘程序员
智能小车强化学习自动寻迹

智能小车强化学习自动寻迹

作者: Funzion | 来源:发表于2018-09-04 16:45 被阅读45次

    一、前言

    这算是一个综合应用了,算是对过去多年知识的一个简单总结。在做之前我很焦虑,怕自己半途而废。不过最终还是用7个晚上完成了这个项目,最终的实现并不难,只不过是结合了电子技术和计算机技术的一个应用,算是对过去多年自动化、软件工程的学习和工作的一个集成,算是给自己的一个礼物,也是一个纪念。
    演示视频:
    https://www.bilibili.com/video/av31008997

    二、硬件部分

    1、硬件示意图如下:

    硬件示意图

    2、模块说明

    模块名称 功能说明
    树莓派 运行树莓派定制的Debian系统,采用Python的gpiozero库控制树莓派的GPIO。
    继电器 本来可以用L298N电机驱动芯片,不过我的L298N坏了,改用继电器代替。
    3路寻迹 用于检测地上的黑线,检测到黑线时输入0,否则输入1。
    底盘 2个直流电机驱动,考虑到树莓派的供电情况,我没有用树莓派为电机供电,而是通过继电器直接给电机供电。

    3、实验环境

    最终的实验环境就是这样的了:


    实验环境

    三、软件部分

    1、算法描述

    由于输入(3个)和输出(3个)的状态都较少,我采用了一个很简单的强化学习的算法,我们就叫Naïve Table Reinforcement Learning Algorithm(朴素表格强化学习算法)吧。

    算法描述
    字符说明
    字符标识 字符说明
    状态
    RS 寻迹模块右检测器检测到黑线
    MS 寻迹模块中检测器检测到黑线
    LS 寻迹模块左检测器检测到黑线
    行为
    L 小车左转
    M 小车直行
    R 小车右转

    算法文字描述
    每次取L、F、R三个维度的最大值决定行走的方向,程序开始时,因为所有action的值都为1,所以随机选择行走方向,行走后根据寻迹模块的输入更新表格的数据,比如:如果RS=L,选择了L,小车走一步偏离了方向,这时给L一个-1的奖励,加到L上;如果选择了R,小车在正确的道路上,这时给R一个+1的奖励。这个算法真的很Naïve了。值得一提的是,我给MS=L的状态每次都加一个随机选择方向的可能以模拟真实情况。

    2、算法伪代码

    伪代码

    3、小车行走代码

    以直行代码为例,其它的类似。


    直行代码

    四、后记

    以前在学习和工作的工程中,一直纠结在想要写底层驱动,现在想来那是自己跟自己较劲。Linux嵌入式开发板买过三个,智能小车底盘都买了两个了,还有一堆电子元件,视频教程也看了很多很多,基本的原理是明白,不过一直没有实践,最终也没能把这些东西用起来,一直都是徒劳。那时候不明白自己想要做什么,想着越底层越高端,其实不然,我想要做的用树莓派就可以实现,没必要一直跟底层较劲。在人生的路上,难免会走一些弯路,不过不要紧,要及时调整,找到自己真正适合和感兴趣的,并且自己能够胜任的才是最好的。我们的分工各有不同,不可能都去研究某个领域底层的底层,要能够合理利用有效资源,把自己能够胜任的工作做到最好才好。不过话又说回来,以前学的东西也不是一点用都没有,算是自己知识的一个积累,也许在适当的时候可能会用上。希望在以后的学习和工作中,要明确自己的目标,合理的利用有效资源,实现小小的愿望,这样才会过得不累。

    相关文章

      网友评论

        本文标题:智能小车强化学习自动寻迹

        本文链接:https://www.haomeiwen.com/subject/pgbgwftx.html