掃地機械人的模擬程式 3

2021-09-14 03:20:36 字數 2462 閱讀 6794

終於要挑戰尋路模組,雖然我是在重複造輪子,但看一下別人的輪子怎麼造也是很重要的,所以

在這之前首先搜尋下,看看有什麼現成的思路和**,收穫如下:

有兩種尋路邏輯, 隨機碰撞和路徑規劃,考慮到:

a. 隨機碰撞似乎需要不少經驗/實驗資料才能達到不錯的效果,我缺經驗/資料呢

b. 現在我擁有乙個接近於理想環境的情況,更便於路徑規劃

c. 隨機碰撞得到的路徑不漂亮,搞不好還漏了邊邊角角,不符合我的美學價值觀

所以決定用路徑規劃

這篇文章介紹了一些路徑規劃的方法

a. 人工智慧:本來是想用辦法來做的,畢竟算是用過matlab的人(但忘光光了),但後來發現學習成本有點高,就放棄了……

b. 人工勢場法:看上去也不簡單,也放棄……

d. 模板模型法:很容易理解,就是有幾種走法,按情況呼叫。就決定用這個辦法了

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步

掃地機械人黑色耐髒嗎 如何選購掃地機械人?

我家全部打掃一次,僅僅只需要50分鐘左右,也就是說,這個掃地機械人充滿電可以將我家打掃四遍。deebot t5有乙個斷點續掃功能,就算是在工作過程中因為電量過低而不得不返回充電樁充電時,在充滿電後又會開始從之前的斷點區域開始繼續打掃,這樣的好處是不會出現遺漏或者重複清掃,從而大大提高了清掃效率。這台...

掃地機械人石頭爬坡 智慧型掃地機械人爬坡能力分析

家裡有了掃地機械人,不用再擔心家裡的地面是否乾淨了。雖然有了掃地機,但是針對不同品牌掃地機械人,由於它的設計上各不相同,所以在掃地機工作時針對不同的地面環境,爬坡能力也會不盡相同。智慧型掃地機械人為什麼需要爬坡?掃地機械人一般只能在同一水平面進行清掃,但是各種不同的地面環境,決定了掃地機械人必須具備...

掃地機械人噪音響 智慧型掃地機械人的潤滑方案

隨著生活品質的提高,智慧型掃地機械人已走進了家庭,它的存在幫我們進一步的減少了家務的用時,提高了生活效率。掃地機械人運轉過程中免不了有工作噪音,靜音是衡量智慧型掃地機械人的重要效能,也使用者選擇掃地機械人的一大指標。一般來說30db以下適合睡覺,60db為普通室內談話時的音量,而70db則達到吵鬧的...