71 麥昆Plus(二)

(2020/06/25 端午節)

利用端午節假期來測試加上哈士奇的麥昆Plus,是如何進行循跡,剛好官方有相關的文章可以做參考,所以就照著做,但我忘了帶哈士奇可調整角度的固定架回來,測試的結果,還沒有很理想,先將測試內容公布出來,待下次再優化了,去吃粽子了!

一、官方資料

二、加上哈士奇的麥昆Plus

三、哈士奇的循跡原理(取自官網)

  • HUSKYLENS 的巡线功能是基于卡内基梅隆大学的开源项目pixy 实现的。

    • pixy 的算法能对图片进行颜色识别,其基本思想是利用颜色空间来除去所有用户不感兴趣的背景,提取出前景(如线条)

      • 这样HUSKYLENS在学习线条的颜色后,就会识别出拍摄视野范围内的该颜色线条。

  • 哈士奇的循跡學習(訓練)

    • 進入循線選單

      • 取消【學習多個】(預設就沒有學習多個)

      • 循線學習

      • 循線追蹤來測試

  • 哈士奇的循線邏輯 (以下取自官網)

如何让麦昆plus 在白底黑线的巡线地图上循着黑线运动呢?其实我们只需要知道麦昆plus 相对黑线是什么位置,分下面三种情况:

1、当麦昆 plus 在黑线的偏右位置时(右邊的白色面積較大),控制麦昆 plus 向左转弯;

2、当麦昆 plus 与黑线相对居中时,控制麦昆 plus 直行;

3、当麦昆 plus 在黑线的偏左位置时(左邊白色面積較大),控制麦昆 plus 向右转弯。

具体应该怎么实现呢?我们将 HuskyLens 在巡线过程中屏幕上显示的信息剥离出来,抽象成下图的几何数学模型。

HuskyLens屏幕的分辨率是 320×240,屏幕左上角的O点为屏幕的坐标原点(0, 0),水平向右方向为 X 轴正方向,竖直向下方向为 Y 轴正方向,因此屏幕右下角的坐标为(320, 240)。上图中橙色虚线为屏幕的中轴线,这条线的横坐标值为160。上图屏幕中黑色的线,是HuskyLens 摄像头“看到”的巡线地图线条,蓝色箭头为 HuskyLens 计算出来的线条方向,蓝色箭头的起点坐标为(x1, y1),终点坐标为(x2, y2)。

综上,所以我们只需要判断蓝色箭头的起点相对中轴线的位置就能实现巡线了

四、循跡測試

(一)任務一:開始循跡

  • 将HuskyLens 的屏幕横轴分为两个区间(向左向右)和一条线(中轴线)实现巡线效果。

  • 設計原理說明

    • 当HuskyLens 检测到黑线在屏幕的左边时,即蓝色箭头的起点横坐标值x1<160,控制麦昆 plus 左转;当黑线在屏幕的右边时,此时 x1>160,控制麦昆 plus 右转;当黑线在屏幕的中间时,此时 x1=160,控制麦昆 plus 直行。

  • 程式說明

    • 麥昆Plus擴展積木: https://github.com/kodorobot/MaqueenPlus

    • 哈士奇擴展積木 : https://github.com/DFRobot/pxt-DFRobot_HuskyLens

    • 程式

      • 運行效果

      • 麦昆plus 能完成基本的巡线任务,但同时也暴露如下几个问题:

      • 1、麦昆 plus 在前进中明显左右晃动,速度变化不连贯,不能稳定直行运动;

      • 2、速度不能设置太快,速度太快在转弯处很容易脱线;

      • 3、不同的转弯角度,需要的转弯速度也不一样,当巡线地图中有好几种转弯角度时很容易脱线。

      • (* 如果转弯过程中麦昆plus 脱离轨道,就需要通过修改左右侧电机的速度,不断调试。)

      • 因為我的哈士奇固定架沒有帶回家,所以無法固定鏡頭,所以我最後降低速度,走起來才比較順

        • 結果

(二)任務二:循跡優化1

  • 設計原理說明

    • 任务一中麦昆plus 在前进中左右晃动,不能稳定直行运动,这是为什么呢?因为麦昆plus 直行的横轴区间只是一条线,而运动过程中带有惯性,所以在 x=160 处直行是很难实现的。

    • 优化思路是将直行的运动区间扩大,如下图所示,我们将区间 [150,170] 设置为麦昆 plus 直行区间,当起点坐标值 x1 在这个区间内时,控制麦昆 plus 直行;当 x1<150 时,控制麦昆 plus 左转;当 x1>170 时,控制麦昆 plus 右转。

  • 程式說明

    • 前半段的程式一樣,只有增加函式中前進的判斷範圍加大了

(三)任務三:循跡優化2

  • 設計原理說明 ,就像有多個紅外線循跡感應器的感覺

    • 前面任务中之所以出现转弯脱线的问题,是因为同一种转弯速度并不能适应所有的转弯角度,一旦设置的转弯速度过快或过慢,都会导致脱线。按照我们先前的优化思路,既然可以将屏幕分成 3 个运动调节区间,为什么不继续分为 5 个呢?黑线位置越趋近两边,转弯速度越大;黑线位置越趋近于中轴线,转弯速度越小。

    • 或者更进一步,直接分为 7 个运动调节区间呢?

  • 官方的程式內容