摘要:話說我的地圖就是柵格形式用點坐標來表示格子模板模型法很容易理解,就是有幾種走法,按情況調用。
尋路模塊 (1)
終于要挑戰尋路模塊,雖然我是在重復造輪子,但看一下別人的輪子怎么造也是很重要的,所以
在這之前首先搜索下,看看有什么現成的思路和代碼,收獲如下:
有兩種尋路邏輯, 隨機碰撞和路徑規劃,考慮到:
a. 隨機碰撞似乎需要不少經驗/實驗數據才能達到不錯的效果,我缺經驗/數據呢 b. 現在我擁有一個接近于理想環境的情況,更便于路徑規劃 c. 隨機碰撞得到的路徑不漂亮,搞不好還漏了邊邊角角,不符合我的美學價值觀
所以決定用路徑規劃
一些路徑規劃的方法這篇文章介紹了一些路徑規劃的方法
a. 人工智能:本來是想用辦法來做的,畢竟算是用過matlab的人(但忘光光了),但后來發現學習成本有點高,就放棄了…… b. 人工勢場法:看上去也不簡單,也放棄…… c. 柵格法:說明了地圖形態(含障礙物),但并沒有說明具體走法,有些懷疑小編或者作者的邏輯能力。話說我的地圖就是柵格形式(用點/坐標來表示格子) d. 模板模型法:很容易理解,就是有幾種走法,按情況調用。就決定用這個辦法了決定算法
按上面模板模型法的思路,去搜關鍵字(Complete coverage path planning等),看了2篇論文和一些科普文章
這篇文章引起了我的注意,這篇論文說的是基于A*算法來實現完全路徑覆蓋,里面還有兩個走法,分別是U-turn Search和 Internal Spiral Search,形象地說就是U型走法和回形走法
從文章結論看,U型走法配合A*算法的效果似乎不錯(重復率低),那么我也按這個辦法來吧
具體來說就是U型走法清掃一次,然后通過A*算法走到最近的未清潔點,如此反復直到所有點都被清潔/走過
雖然這不是全局最優解,但還是先以實現為目標努力吧
A*算法稍微有些復雜,之后再開篇文章寫,我先寫U型走法的部分,思路:
需要兩個U型走法,一個朝右,一個朝左,除了朝左右不同之外其他相同
以U型朝右走法為例,先嘗試往上下移動,“碰墻”后朝右移動一格,然后掉頭,如此反復直到無法往右
由于U型走法具有反復的特性,如果發現下一步要走的點/格子已經走過了,就要停下來
path_finding代碼1,先寫上面3里提到的判斷方法
篇幅起見,我這里只寫一個判斷上方格子是否走過的方法:
def judge_up_passed(self): x, y = self.current_coordinate up_coordinate = (x, y + 1) if up_coordinate in self.path_log: return True else: return False
path_finding代碼2,U型朝右走法:
def u_turn_toward_right(self): rollback = False while True: if (self.judge_up_passable() == False) and (self.judge_down_passable() == False) and ( self.judge_right_passable() == True): self.move_right() if rollback == False: while self.judge_up_passable() == True and self.judge_up_passed() == False: self.move_up() if self.judge_right_passable() == True and self.judge_right_passed() == False: self.move_right() rollback = True else: rollback = True if rollback == True: while self.judge_down_passable() == True and self.judge_down_passed() == False: self.move_down() if self.judge_right_passable() == True and self.judge_right_passed() == False: self.move_right() rollback = False else: rollback = False break
之后在main中添加方法
from path_finding import * Robot.u_turn_toward_right = u_turn_toward_right Robot.u_turn_toward_left = u_turn_toward_left Robot.judge_up_passed = judge_up_passed Robot.judge_down_passed = judge_down_passed Robot.judge_left_passed = judge_left_passed Robot.judge_right_passed = judge_right_passed測試
接著看一下寫的U型走法效果如何,在main中測一下
... robot.u_turn_toward_right() print(robot.path_log) print(len(robot.path_log))
然后自己按著path_log看一下U型走得如何,按第一篇文章中的地圖,沒有意外的話,應該是82步
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41293.html
摘要:前言在朋友的推薦下,嘗試寫一個模擬的掃地機器人的程序,當做是練習工程能力和算法寫這篇文章一是記錄和分享思路,也希望獲得更多意見和建議,歡迎評論效果本來是打算最后再貼圖的,文章沒啥人氣,加上感冒偷個懶就先貼個圖吧不知道為什么沒辦法直接貼圖片, 前言 在朋友的推薦下,嘗試寫一個模擬的掃地機器人的程序,當做是練習(工程能力和算法)寫這篇文章一是記錄和分享思路,也希望獲得更多意見和建議,歡迎評...
摘要:上一篇文章中介紹了地圖模塊,接著來看主模塊和動作模塊主模塊思路主模塊由一個類構成,其調用各子模塊,且其屬性可用于保存信息這些信息,除了之前地圖模塊中的和之外,還包括初始坐標現所在坐標移動路徑代碼動作模塊思路所謂移動,在模擬程序里就是更新現所 上一篇文章中介紹了地圖模塊,接著來看主模塊和動作模塊 主模塊 思路:主模塊由一個Robot類構成,其調用各子模塊,且其屬性可用于保存信息這些信息,...
摘要:尋路模塊通過一番尋找,發現這系列文章,其不僅包含算法,連尋路算法中的一些基礎知識也一并介紹了,不愧是斯坦福出品,也很感謝譯者要實現點到點最短路徑,還需要做一些微小的工作,下面逐個說明計算曼哈頓距離的函數目的是尋路,肯定需要一個方法來估算兩點 尋路模塊 (2) 通過一番尋找,發現這系列文章,其不僅包含A*算法,連尋路算法中的一些基礎知識也一并介紹了,不愧是斯坦福出品,也很感謝譯者要實現點...
摘要:測試覆蓋率有什么優勢依然是以打掃房屋為例,測試覆蓋率可以度量打掃的質量指示何時該停止打掃提醒我們還有其他地方需要清理。至此,我們可以得出結論測試自動化更高的測試覆蓋率。 ...
摘要:在全球智能新商業峰會上,億歐公司發布中國人工智能商業落地強榜單與研究報告。一定程度上,該榜單反映了人工智能在中國各細分領域的商業化程度。 人工智能商業化是什么意思?它和商業智能有怎樣的聯系?本文從概念、重大發展事件、發展趨勢這幾個方面全面解讀人工智能商業化。 121 一、概念人工智能商業化,是指人工智能走向商業化的歷程,即人工智能實現商業場景的應用。人工智能的商業化進程正一步步通過各種...
閱讀 1644·2021-11-24 09:39
閱讀 3083·2021-11-22 15:24
閱讀 3091·2021-10-26 09:51
閱讀 3276·2021-10-19 11:46
閱讀 2891·2019-08-30 15:44
閱讀 2217·2019-08-29 15:30
閱讀 2537·2019-08-29 15:05
閱讀 773·2019-08-29 10:55