我有2轮差动驱动机器人,我使用pid进行低水平控制以跟随生产线。我实现了q学习,该学习使用样本进行16次迭代,然后使用它们来确定在线上的最佳位置,以便汽车从那里转弯。这允许PID设置并平滑快速跟踪。我的问题是我该如何设置奖励功能来提高性能,即让q学习找到最佳选择。

编辑16个输入,其中包含最后15次迭代和此迭代的行位置。线位置在-11之间,其中-1表示仅最左侧的传感器可以看到该线,而0表示该线位于中间。我希望它学习一条线位置,当它再次面对此输入时,将以该线位置为中心设置该线位置,并根据该线位置绘制曲线。例如,错误是必需的位置-行位置,因此,假设我输入了16个0,然后将所需的计算为0.4。因此,在那之后,汽车将以0.4为中心,我希望这会有所帮助:) >我的传感器读数返回-1.0f1.0f之间的值。 1.0f表示右侧的外部传感器仅是线路。我有8个传感器。

void MainController::Control(void){

    float linePosition = sensors->ReadSensors();

    if(linePosition == -2.0f){       
      lost_line->FindLine(lastPos[1] - lastPos[0]);
    } 
    else{
        line_follower->Follow(linePosition);
        lastPos.push_back(linePosition);
        lastPos.erase(lastPos.begin());   
    }
}


这是QPredictor值的逻辑(我称其为学习部分)。最后,QPredictor

void LineFollower::Follow(float LinePosition){

    float requiredPos = Qpredictor.Process(LinePosition,CurrentSpeed);
    float error = requiredPos - LinePosition;

    float ErrorDer = error -LastError;

    float diffSpeed = (KpTerm * error + (KdTerm * ErrorDer));

    float RightMotorSpeed = CurrentSpeed - diffSpeed;
    float LeftMotorSpeed = CurrentSpeed + diffSpeed;

    LastError = error;

    driver->Drive(LeftMotorSpeed,RightMotorSpeed);
}


我现在只有平均错误,并且目前没有使用学习,因为没有奖励功能就无法完成学习。如何根据机器人的尺寸进行调整?

评论

我认为您的问题需要一些改进才能得到解答。例如。你想学什么? PID参数?您对最终系统行为的目标是什么?

链接的问题:robotics.stackexchange.com/questions/361/…

内存阵列存储了机器人的过去经验,而不是未来。如果所有数组元素均为白色,则必须给出负数奖励。对于简单的曲线,这将起作用。

是的,这是有道理的,但是如果我没有输掉线怎么办,如何增加或减少奖励或惩罚

+1尝试;您可以使用简单的网络摄像头进行验证;使用简单的检查来确定您的机器人离线条中心有多近。然后,使用它并添加奖励(例如+1表示“每秒继续前进”)和惩罚(如果一个轮子越过线;每秒-50)。

#1 楼

自适应PID控制基于手动编码的线跟随算法,通过强化学习对其进行了修改。这个想法是,在PID函数中,一个参数是未知的(例如,到线的距离可以容忍为偏差),并且该参数将在驱动机器人时动态计算。奖励由操作员Clicker培训手动提供,也可以循环确定。机器人正在开车,时间被测量。机器人再次驱动parcurs,目标是减少时间。

评论


$ \ begingroup $
我看过,但是我有kohonen映射和q学习,我使用kohonen对输入向量进行聚类并使用q学习来确定输出,我可以使该系统适合我的吗?
$ \ endgroup $
– Ege Keyvan
16年8月15日在9:07

$ \ begingroup $
当然,自组织映射可以用作关联记忆(Q-KOHON,Claude F. Touzet)。
$ \ endgroup $
–曼努埃尔·罗德里格斯(Manuel Rodriguez)
16年8月15日在9:18

$ \ begingroup $
您是否建议根据输入内容系统更改参数?
$ \ endgroup $
– Ege Keyvan
16年8月15日在9:45

$ \ begingroup $
@EgeKeyvan:请发布您的源代码或NXT-G GUI的屏幕截图
$ \ endgroup $
–曼努埃尔·罗德里格斯(Manuel Rodriguez)
16年8月15日在14:48

$ \ begingroup $
我现在发布了
$ \ endgroup $
– Ege Keyvan
16年8月17日在12:32

#2 楼

我认为Q学习对于这样一个简单的跟踪问题来说是过大的选择。我强烈建议您使用一种更简单的方法,即纯追踪跟踪控制器。这里是一些您可以阅读有关该方法的链接。 Matlab在该主题上的页面非常整洁。

Matlab的纯追踪控制器

纯追踪路径跟踪算法的实现