有限狀態機線路跟蹤器

+薦課 提問/討論 評論 收藏 分享
大家好,我是 Jon Valvano。 在上一個視頻中,我們討論了一般的 有限狀態機,具體來說,是解決了交通信號燈的 控制器問題。 在本視頻中,我們將解決第二個有限 狀態機示例,該示例與本實驗非常接近。 那就是,我們將會考慮 如何打造一個可使機器人循線 移動的系統。 所以地面上會有一條線路,機器人上 會配有傳感器,我們希望機器人 能夠沿這條線路移動。 還記得吧,有限狀態機的本質是我們會有 一個系統。 該系統將會有輸入。 它將會有狀態,用于編碼我們的知識, 也就是我們認為將會成真的情況。 它還會有輸出,用于影響我們的世界。 那么,我們要解決的問題將會是一個 非常簡單的簡化版本的機器人,要求該機器人 在桌子上沿一條線路移動。 實際的機器人有八個傳感器。 但是,我們今天在這里討論的機器人僅有兩個傳感器。 而且它們是二進制傳感器。 所以,如果這里的這個傳感器能夠看到線路, 則輸入為 1。 如果該傳感器沒有看到我想要沿循的線路, 則看到的是 0。 所以 1,1 輸入狀態表示我正在線路上。 1,0 表示偏右。 0,1 表示偏左。 使用有限狀態機的根本意義在于 能夠解決這一很自然的問題 -- 好吧, 如果我沒有看到任何線路,那我是偏左了呢, 還是偏右了呢? 我們將使用狀態機的先驗知識 來區分迷路的兩種可能的 情況 -- 偏左還是偏右。 我的電機也非常簡單。 我將會有兩個電機,一個左輪一個右輪 -- 您將在本課程中構建一個差動 驅動型機器人。 如果我想直走,我將會 同時驅動兩個電機。 稍后,我們將在課堂上學習有關復雜性質的 所有方面。 但簡單來說,如果輸出為 1,1, 那么便會直走。 現在,向右轉 -- 我不想急轉彎。 我只想平緩地右轉, 因為我將會假設我離線路很近。 我要采用的方法是, 我將會驅動左側電機,使其達到高電平。 所以,如果我嘗試右轉, 我將會降低右輪,或者說右側 電機的速度。 具體的做法是,使用這個占空比 為 50% 的切換式振蕩波形來驅動該電機。 這便是我用以右轉的方式的本質。 左轉的方式則與此相反。 顯然,我將會將右側電機驅動至高電平 -- 持續為 1。 但對于左側電機,我將會減慢其速度并使其在高低電平之間切換。 這將會實現平穩的左轉。 這便是我將會采用的方法。 好的,如果我得到0,0,那么它將會停止。 但是在這個特殊的示例中,我們不會用到停止。 所以,記住,解決有限狀態機問題的方法, 或者說策略,便是考慮各種狀態。 所以,我將會考慮 -- 我可以使用各種狀態。 這個便會在這里被編碼。 我實際上是在線路上。 我現在在線路的正中間。 此外,還有其他狀態。 就像我說的,我可能偏左, 也有可能偏右。 在這里這個特定的示例中,或者說在本講座中, 這些全部都是我將會用到的狀態。 在實驗中,或者在實際的機器人上, 您將會用到的狀態要多得多。 但是,在這里,我只想介紹相應的設計策略, 說明如何將我的想法映射到將會在機器人上運行的 實際代碼中。 在找出這些狀態后,接下來我要做的事情便是, 關于這些狀態,我想要做什么? 如果我在跑道的中央, 我便會想要直走,所以我將會直走。 此時,引擎 -- 有限狀態機引擎將通過我的控制器 完成各個循環,我將會提供輸出。 我將會等一會兒,因為電機非常慢。 我必須給它留出反應時間。 我將會提供輸入。 然后,我將會根據我的現態 和輸入來選擇我的次態。 這將會是我的序列。 讓我們直行,看看會發生什么。 我們將會直行。 我將會輸出、等待、輸入、轉入次態、輸出、 等待、輸入、轉入次態、輸出、等待、輸入、轉入次態、輸出、等待、 輸入、轉入次態。 我在線路上。 然后,我將會繼續在線路上移動。 所以在這個虛擬世界里,這個機器人 實際上是直行的。 但這條線路是彎曲的。 所以,在幾十、幾百、幾千次的 直行之后, 我最終將會偏離該線路。 現在,只有兩個選擇。 我可以走到偏左或偏右的位置。 下面將說明偏左時的情況。 當偏離路線時,首先會發生的事情是 -- 如果我將會 走到偏左的位置,首先會發生的是,左側的傳感器 將會變暗,也就是變成 0。 現在,我正處于偏左狀態。 在看到該情況時,我知道之前的狀態 -- 我過去一直在線路上。 然后,我會查看我的輸入。 我看到左側傳感器的信號消失了。 我知道現在有一點偏左了。 但在這個簡單的方案中,我在左邊。 對此,我該怎么辦呢? 我該怎么做? 我想右轉。 我將會放慢速度。 我想右轉。 所以,我將會降低右側電機的轉速。 我將會放慢這個電機的速度。 所以,我將會放慢右側電機的轉速, 使左側電機保持全速旋轉。 所以,這個電機將會全速運轉。 這個則會半速運轉。 這將會實現平穩的轉彎。 由于我偏左了,所以我想要右轉。 所以,我的狀態是我偏左了。 我的措施是,通過以 50% 的占空比驅動右側電機 實現平穩右轉。 換句話說,這個電機 將會處于高電平。 這個電機將會以 50% 的比例振蕩。 這便是我為右側電機 提供的功率 -- 左側電機滿功率,右側電機半功率, 機器人將會平穩右轉。 同樣,機器人需要一定的反應時間。 所以,如果我右轉、右轉、右轉, 我將會平穩右轉,直至回到線路上。 這樣,我剛剛偏左了。 現在,我看到兩個傳感器都已開啟。 那么,我將會如何做呢? 現在,我回到了 中央狀態。 所以,我將要做的是直行。 此時,我將會重新驅動兩個電機全速運轉。 我將會移動,好的,再次輸出、等待、輸入、 轉入次態、輸出、等待、輸入、轉入次態、輸出、等待、輸入、轉入次態。 這里的虛擬機器人實際上將再次執行, 但線路是彎曲的。 下面將說明機器人走到偏右 位置時的情況。 之前我在線路上。 現在,我偏右了。 所以,我現在處于偏右狀態。 我的意思是,狀態機處于 代表我的位置偏右的狀態。 我想要做什么? 好吧,我想要左轉。 我們已經了解了如何右轉,左轉 則與之相反。 所以,我將會驅動 --繼續以 100% 的 功率驅動右側電機,以 50% 的 功率驅動左側電機。 這將會導致 -- 現在,我是偏右的。 我想要平穩左轉, 從而重新找到線路。 就像前面的數千次操作一樣,我將會輸出、 等待、輸入、轉入次態。 但是,這次我將會 -- 如果我想,我將會緩慢左轉。 所以,我將會左轉。 我現在仍然偏右。 我將會左轉。 我現在仍然偏右。 類似地,我將會驅動左輪以較慢的速度轉動。 我現在仍然偏右。 仍然偏右。 然后,嘣-- 我找到線路了。 所以,我之前在偏右的位置 -- 之前是。 現在,我正從偏右狀態過渡到 中央狀態,該狀態讓我知道我又回到了線路上, 我將會做我在線路上時總是會做的事情。 那就是直行。 好的,我會直行。 這基本上就是我的策略。 我說過,真實的循線機器人 將擁有不只三個狀態。 在實驗中,您將會擁有超過三個狀態。 但是,我只是想說明這個過程。 這些便是我的狀態。 我將會開始繪制狀態轉換圖。 但是,現在我列出了這些狀態。 由于這是一個Moore 狀態機, 因此,將會有一個結果 --每個狀態的輸出。 我將會驅動 -- 如果我將會在中央,那么我將會直行。 如果偏左,我將會右轉。 如果偏右,我將會左轉。 這便是我將要做的事情的本質。 接下來要做的是,放入相應的時間。 我將其稱為延遲或等待。 但是,如果我們有實際的機器人, 那么等待的時間將是電機機械響應時間的函數。 如果您的機器人要在您給出命令后 大約 100 毫秒才能實際執行相應任務, 這個時間便是它的時間常數。 所以,我們將會以大約這個時間 常數來運行有限狀態機。 我們將會以稍快的速度運行狀態機,但又不能太快。 如果比響應時間快太多,則不會發生太多活動。 所以,我們將會每 50 毫秒運行 該有限狀態機一次。 注意,整體目標是我所處的狀態 -- 輸入模式 -- 1,1 在線路上 -- 偏左、偏右 -- 這些是簡單的狀態。 但是這兩個是較為復雜的狀態。 傳感器給出 0,0。 但是,我有可能是這種情況的偏左。 也有可能是對應這種情況的偏右。 區分這兩個狀態便表明了 我實際上將會如何解決這個問題, 以及我為什么使用有限狀態機。 好的,重申一下,這里我將會使用三個狀態。 每個狀態都有一個名稱 -- 中央、偏左和偏右。 每個狀態都有一個輸出。 每個狀態都有一個時間延遲。 然后,每個狀態都有箭頭,箭頭數量 是輸入的函數。 如果我采用的是n 位的輸入,那么 我將會有 2 的 n 次方個箭頭。 由于我采用的是 2 位的輸入,因此我將會在每個狀態上 延伸出 4 個箭頭 -- 00, 01, 10, 11. 這便是我的狀態圖將會擁有的結構。 我們將會在后面構建該圖。 同樣,根據您是習慣 使用圖表,還是圖形 -- 這二者是完全相同的。 您可以選擇上述任何一種方式。 實際上我已經開始給出了 C 代碼, 因為事實證明 C 代碼 -- 這是狀態轉換表。 這是狀態轉換圖。 因為事實證明C 代碼和狀態轉換表 是完全相同的。 它們之間的映射很明顯。 好的,同樣,我是從狀態開始,然后是輸出模式, 然后是時間延遲。 這將會是50 毫秒。 現在,我只是通過對我將要做的 事情的直覺來進行設計 -- 對吧? 以下便是我們在這里將要做的事情。 如果我之前在線路上-- 我之前在線路的中央, 并且現在看到的輸入模式為 1,1,那么我便知道 我現在仍在線路上。 我現在仍在線路的中央。 所以,如果我之前在線路上,并且我現在仍在線路上, 那么,我便是在線路上。 所以,我將留在該狀態。 這一個,我之前偏左。 好的,我之前是偏左的,但是現在 傳感器變成了 1,1 --好極了。 好的,我回到了線路上。 所以,我將要進入中央狀態。 如果我偏右,現在看到的是 1,1, 那么我現在 將會回到線路上。 狀態與輸出之間似乎 有一個一一對應的映射。 換句話說,似乎每個輸出 都只有一個對應的狀態。 不是這樣的。 其實同一個輸出可能會對應多個狀態。 而正確的說法是,每個狀態都 有且只有一個輸出。 但反過來說就不正確了。 每個輸出不一定都有一個狀態。 但這里這個例子比較簡單。 如果我看到線路,這便意味著我正在跑道的中央。 所以,我將要做的是直行。 這是狀態轉換圖。 如果您要繪制 -- 這是狀態轉換表。 如果您要繪制轉換圖,我們在這張圖上進行了說明。 如果我在線路上 -- 所有那里的這個就是這個。 這里這個是我在偏左位置。 好的,我現在偏左,但是能夠 看到線路 -- 這便是這個。 這里這個,我在偏右位置,但是能看到線路 -- 這是這個 -- 好的,3、2、1。 這就是映射 -- 我說過,表和圖之間 有一個一一對應的映射。 這是這個過程的開始。 這方面很簡單。 現在,我已經開始編寫實際的 C 代碼, 在這里向您展示 -- 這將會是 00、01、10、11 條件 -- 這是我將會放在我的 C 代碼中的 實際代碼,它也是與轉換表完美匹配。 我們來解決一個難一點兒的問題。 如果我在線路上,現在傳感器 -- 左側的傳感器死機了,會發生什么? 這是左側傳感器,現在它變黑了。 發生了什么? 這意味著我最終偏左了。 我最終偏左了。 我將會編碼 -- 這個箭頭,這里這個狀態是我在中央, 并且看到的是 10。 如果我偏左了,看到這個仍然是黑屏, 會發生什么。 這便是我將會如何對其進行切換。 我將要進入中央狀態。 如果輸入模式恰巧是 01, 這邊這個箭頭就是這個 -- 所以,這是一個很簡單的狀態機 -- 在實驗中您將需要對其進行修正, 因為它有一個錯誤 -- 但是,這里的這個狀態機將會 在兩個狀態之間輪換, 實現平穩的右轉。 所以,右側電機 -- 在這里右側和左側電機將會 -- 我們偏左了。 所以,我們想要右轉。 為了做到這一點,我將會切換右側電機, 并使左側電機保持高電平。 我將會在 C 代碼中放入這兩個 條目。 我將會每次構建一點。 讓我們來看看這個。 這便是我們在尋找的,對吧? 這是我們曾嘗試解決的問題。 那就是,如果我知道我偏左了 -- 我知道我偏左了,因為上次看時, 我是在偏左位置 -- 現在完全黑屏了。 我處于迷路狀態。 我知道,我之前是在偏左位置, 而且現在我完全看不到線路了, 那么我有很大的可能性是偏左了。 我不可能跳過線路。 它不會跳, 也不會飛。 所以,我不可能偏右。 所以,一定是偏左。 同樣,這在 C 代碼中體現在這里。 在狀態轉換表中則是向剛才那樣。 在狀態轉換圖中也有相應的表現 形式。 接下來,在轉彎時,我將會如何做? 我將會急轉彎。 我們實際上將會 停止右側電機 -- 并向右急轉彎。 我們現在偏左。 我們將會向右急轉彎, 方法是使一個電機完全停轉,而另一個電機仍然轉動。 下面說一下另外一種情況。 現在我偏-- 之前我在線路中央。 現在,右側傳感器黑屏了。 右側傳感器黑屏意味著我剛才的位置偏右了。 同樣,表格中的這一點是與 這個轉換圖中的這里對等的。 如果我之前在偏右位置 -- 好的,然后我們將通過在這兩者 之間來回切換來切換狀態。 同樣,如果我只是稍微偏右, 如果輸入為 10,它將會在這兩者 之間循環,導致一個引腳變成高電平, 另一個則停止。 就像偏左時一樣, 判斷偏右的依據是, 我之前處于偏右狀態。 現在我看到完全黑屏了。 我現在迷路了。 我將會認為我處于偏右位置。 我將會完全停止左側電機, 使機器人向左急轉彎, 因為我現在偏右。 同樣,這三者是一一對應的。 這里的這個箭頭代表狀態轉換表中的 這個點和 C 代碼中的這里。 我們已經介紹了一些奇怪的情況。 這一個并不奇怪。 它表達的是 --好吧,這些也比較奇怪。 這些才是真正的奇怪。 有時,我們不得不為其填充條目。 您不得不為它們提供一個條目。 但是其中的一部分根本就沒有意義。 我在線路上。 然后,嘣 --我突然遠離線路。 假設您使用的是一條沒有終點的線路, 假設您的教授給出了這樣的傻子線路, 這種情況便有可能發生, 上一秒您還在線路上, 下一秒就完全脫離了線路。 這便是我們選擇50 毫秒的原因。 您無法使其實際發生。 這太快了,機器人實際上不可能發生這種情況。 但是我們不得不進行猜測。 所以我將會進行猜測。 偏左還是偏右,可能性各占一半。 我隨意選擇一個。 這里是另外兩個實際上也不可能發生的情況, 因為控制器的運行速度要比機器人的 移動速度快得多。 那就是,我之前在偏左位置。 現在,傳感器表示,嘿,伙計,您偏右了。 我在這里假設這種情況有可能發生。 這是我的線路。 我的機器人沿著與線路垂直的方向 移動。 類似地,我之前是在偏右位置。 現在,我又偏左了。 所以這是一些奇怪的情況,它們可能永遠都不會發生。 但無論如何我們得放一些東西在這里。 將這些東西整合在一起, 我們便得到了完整的狀態轉換圖 -- 狀態轉換表。 而在 C 代碼中,在這里您可以看到, 這里的每個箭頭都代表這里的一個 條目。 很明顯,這是一個一一對應的映射,兩方具有 完全相同的信息。 所以,我將會以比機器人的移動速度 快得多的速度運行我的有限狀態機。 這里是實際的 C 代碼。 我實際上會將這些代碼加載到某個機器人上。 機器人將會沿線路移動 -- 一定程度上。 我說過,使用更多的狀態時, 效果會更好。 而且真實機器人上的傳感器 實際上有 8 位,而不是僅僅 2 位。 但是,它的代碼 將會與我們在交通信號燈示例中看到的非常相似。 讓我來全程演示一下。 好的,這是我的結構元素。 同樣,每個狀態都有一個 2 位輸出、一個等待時間 和四個次態,因為有兩個端點。 總共只有三個狀態。 這是一種基于指針的東西,所以它在 C 代碼中的 實際名稱是指針。 這里是我們剛剛繪制的狀態轉換表, 其中包括輸出值、等待時間和 次態,其中次態會因輸入是 00、01、 10 和 11 而有所不同。 好的,該狀態機 -- 就像我說的,這個在實際的機器人上運行。 我將時鐘調得很快。 到第 12 章時,我將會介紹如何運行電機。 簡單來說,它會使電機停止。 然后,我們將會提供輸出。 同樣,我們將會在 模塊 13 中學習如何向電機提供輸出。 但是,電機輸出是首先完成的部分。 時間延遲,我們將會在第 9 章中學習 如何使實際的狀態機發生延遲。 然后是在第 6 章中,我們已經學習了 如何運行傳感器輸入,以讀取輸入。 所以,這里是讀取輸入。 然后,這是狀態轉換, 給出了現態、輸入的值, 也就是 0、1、2 或 3 -- 以及次態。 好的,最后總結一下,我們已經完成了第二個 有限狀態機。 在上一個講座結束時,我曾提到, 我真的覺得這是您工具箱里的一個很好的工具, 因為您可以通過這種抽象 方式解決許多這種 類型的問題 -- 這種抽象方式也可以說是一種系統,您會有輸入、輸出, 您知道的情況不僅取決于當前的輸入, 還取決于之前的輸入。 希望您喜歡本次實驗。 在您的職業生涯中,您將會發現, 這些有限狀態機將是您工具箱里的 一個極好的工具。
課程介紹 共計4課時,51分45秒

TI-RSLK 模塊 7 - 有限狀態機

TI 機器人 RSLK 有限狀態機

此模塊將演示如何使用有限狀態機作為系統的中央控制器。有限狀態機是嵌入式系統工具箱中的一種高效設計過程,可用于解決輸入和輸出問題。

推薦帖子

TMS320C6678芯片TI原裝板卡開發
最近拿到一塊TI原裝6678板卡,TI提供板卡有關資料還在閱讀整理,純英文有點吃力,各個測試例程夾在各處不好找出。各位兄弟姐妹有沒有什么經驗分享下,謝謝。 ...
alasijia DSP 與 ARM 處理器
在ccs中調試程序時打斷點失敗
在單步調試程序時,在設置第8個斷點的時候,出現insufficent resoureces提示,然后斷點就打不上,不管我在那句話,只要是打第八個斷點的時候就是這樣的,退出調試,再重新編譯單步調試,發現就直接進入boot_specia.c pre_init.c autoinit.c這三個程序里了。在ccs里最多只能打7個斷點嗎?這個問題在仿真是出現的,編譯的時候斷點也可以打上,但是在仿真是走到第八個...
下雨天不洗澡 微控制器 MCU
【TI毫米波雷達測評】_2_1243BOOST調試中出現的問題
在我的應用中,需要處理雷達的ADC數據,所以1243BOOST和TI推薦的DAC1000數據采集卡聯合起來一起使用,下圖為實際情況。另外說說數據采集情況。 1)兩個電源線,兩條數據線,60pin的排針,一個網口; 2)電腦設備管理器中有的時候會無理由的識別不出來有接口接入,但驅動已經安裝好了; 3)在調試mmwave_studio過程中,連接的步驟出現一個錯誤,就要所有程序重燒;...
wangran_95 TI技術論壇
MSP430的PWM產生模塊
想請教下MSP430的PWM產生模塊,是什么特別的地方嗎? 目前想用MSP430產生3個不同時序的信號...
安_然 微控制器 MCU

推薦文章

利用TI DLP?技術驅動結構光系統實現箱揀精度 2021年09月17日
耗費大量開發時間的挑戰。    圖2:DLP芯片包含數百萬個可在高速下單獨控制并反射光線以產生投影圖案的微鏡。  TI的DLP技術評估模塊能夠將結構光快速植入機器視覺工作流程。為了演示這種能力,工廠自動化與控制系統工程師以一定的距離和角度將DLP LightCrafter 4500評估板安裝至單色相機。DLP評估板由相機通過一根互相連接的觸發電纜觸發;如圖3所示。    圖...
傳TI、安森美提高模擬IC價格 同行或跟進漲價 2021年09月16日
據業內人士透露,隨著交付周期延長至6個月以上,模擬芯片供應商德州儀器 (TI) 和安森美(Onsemi)均已上調芯片價格,預計中國大陸和臺灣地區的同行制造商也將很快跟進。digitimes報道指出,消息人士稱,IDM 在2021年上半年沒有提高報價,他們最新的漲價將適用于明年的訂單,因為他們通常會提前六個月為新訂單定價。“事實上,大多數國際IDM已開始將生產重點放在汽車芯片...
TI推出梯形和FOC兩種控制方式的無刷直流電機驅動系列 2021年09月15日
你被家里的許多電器所引起的噪音分心了嗎?TI最新推出的無刷直流電機驅動器,采用梯形和磁場定向控制,可使電器噪音減少3.3 dBA。無刷直流電機(BLDC)取代交流感應電機,在通用電器中的應用越來越普遍,包括風扇、空氣凈化器、洗衣機和烘干機泵以及醫用CPAP鼓風機。然而,無刷直流電機的調制也會產生噪聲,尤其是開放式概念越來越在辦公室和家庭環境中流行。為了解決這些噪聲相關問題...
?使用無刷直流電機加速設計周期的 3 種方法 2021年09月15日
和 MCT8316A 等無需編程無傳感器的 BLDC 電機驅動器,可以快速設計出優化的高性能實時控制系統。這些器件可以為 24V 應用提供高達 70W 的功率。憑借集成的智能控制技術,這兩款電機驅動器都很容易調諧,可用于實現高性能和可靠的系統解決方案,是構建下一個基于 BLDC 的低電壓節能型系統時的理想選擇。關于德州儀器(TI)德州儀器(TI)(納斯達克股票代碼:TXN...

shakencity

學習學習TI-RSLK 模塊 7 - 有限狀態機

2019年11月30日 10:04:04

eva_qin7

不錯的視頻,認真學習。

2019年09月26日 22:45:53

SensorYoung

學習學習!不錯的視頻

2019年07月28日 09:05:34

大明58

不錯的視頻,認真學習。

2019年07月02日 09:13:08

zwei9

學習學習

2019年05月25日 17:28:23

hellokt43

好好學習天天向上。。。

2019年05月18日 14:10:52

hawkier

學習了

2019年04月27日 22:28:25

wudianjun2001

不錯的視頻

2019年01月11日 11:34:18

鳳凰息梧桐

學習一下

2018年12月28日 20:43:54

百萬千萬

需要學習

2018年10月19日 10:57:32

dl265361

學習了

2018年10月13日 21:38:02

zly1986ZLY

開始學習了!

2018年10月02日 12:36:39

分享到X
微博
QQ
QQ空間
微信

About Us 關于我們 客戶服務 聯系方式 器件索引 網站地圖 最新文章 手機版

站點相關: EEWORLD首頁 EE大學堂 論壇 下載中心 Datasheet 活動專區 博客

北京市海淀區知春路23號集成電路設計園量子銀座1305 電話:(010)82350740 郵編:100191

電子工程世界版權所有 京B2-20211791 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2021 EEWORLD.com.cn, Inc. All rights reserved
花蝶直播app下载安装_花蝶直播破解版_花蝶直播入口_花蝶直播视频