摘要:上一篇文章中介紹了地圖模塊,接著來看主模塊和動作模塊主模塊思路主模塊由一個類構成,其調用各子模塊,且其屬性可用于保存信息這些信息,除了之前地圖模塊中的和之外,還包括初始坐標現所在坐標移動路徑代碼動作模塊思路所謂移動,在模擬程序里就是更新現所
上一篇文章中介紹了地圖模塊,接著來看主模塊和動作模塊
主模塊思路:
主模塊由一個Robot類構成,其調用各子模塊,且其屬性可用于保存信息
這些信息,除了之前地圖模塊中的coordinate_list和impassable_coordinate_list之外,還包括:
初始坐標
現所在坐標
移動路徑
代碼:
class Robot(object): def __init__(self): from map import coordinate_list, impassable_coordinate_list self.coordinate_list = coordinate_list self.impassable_coordinate_list = impassable_coordinate_list self.start_coordinate = (0, 0) self.current_coordinate = self.start_coordinate self.path_log = [] self.path_log.append(self.start_coordinate) robot = Robot() if __name__ == "__main__": pass動作模塊
思路:
所謂移動,在模擬程序里就是更新 現所在坐標 和 移動路徑
考慮到先做出來,簡化基本動作就只有往上下左右移動
代碼:
import numpy as np def move_up(self): self.current_coordinate = tuple(np.array(self.current_coordinate) + np.array([0, 1])) print("up") self.path_log.append(self.current_coordinate) def move_down(self): self.current_coordinate = tuple(np.array(self.current_coordinate) + np.array([0, -1])) print("down") self.path_log.append(self.current_coordinate) def move_left(self): self.current_coordinate = tuple(np.array(self.current_coordinate) + np.array([-1, 0])) print("left") self.path_log.append(self.current_coordinate) def move_right(self): self.current_coordinate = tuple(np.array(self.current_coordinate) + np.array([1, 0])) print("right") self.path_log.append(self.current_coordinate)
這里用了numpy,其實不用numpy也可以,但考慮到后期復雜尋路邏輯還是會處理數組,先用起來練下手,代碼也顯得簡潔一些?
之后在main中添加方法:
... from motion import * Robot.move_up = move_up Robot.move_down = move_down Robot.move_left = move_left Robot.move_right = move_right感知模塊
思路:
之前提到過先讓機器人根據完善的地圖來實現部分功能,然后再逐步改善,先讓感知模塊根據地圖來“感知”
具體來說,如果某坐標不在coordinate_list中,或者在impassable_coordinate_list中,那么就不能通行,返回False,代碼也比較簡單:
def judge_up_passable(self): x, y = self.current_coordinate up_coordinate = (x, y + 1) if up_coordinate not in self.coordinate_list or (up_coordinate in self.impassable_coordinate_list): return False else: return True def judge_down_passable(self): x, y = self.current_coordinate down_coordinate = (x, y - 1) if down_coordinate not in self.coordinate_list or (down_coordinate in self.impassable_coordinate_list): return False else: return True def judge_left_passable(self): x, y = self.current_coordinate left_coordinate = (x - 1, y) if left_coordinate not in self.coordinate_list or (left_coordinate in self.impassable_coordinate_list): return False else: return True def judge_right_passable(self): x, y = self.current_coordinate right_coordinate = (x + 1, y) if right_coordinate not in self.coordinate_list or (right_coordinate in self.impassable_coordinate_list): return False else: return True
之后在main中添加方法:
... from sensor import * Robot.judge_up_passable = judge_up_passable Robot.judge_down_passable = judge_down_passable Robot.judge_left_passable = judge_left_passable Robot.judge_right_passable = judge_right_passable測試
之后可以在main后面添加測試代碼:
# 移動測試 print(robot.current_coordinate) robot.move_up() print(robot.current_coordinate) print(robot.path_log) # 感應測試 print(robot.judge_up_passable()) robot.current_coordinate = (0, 0) robot.impassable_coordinate_list.append((0, 1)) print(robot.judge_up_passable())
獲得的結果應該是
(0, 0)
up
(0, 1)
[(0, 0), (0, 1)]
True
False
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41295.html
摘要:前言在朋友的推薦下,嘗試寫一個模擬的掃地機器人的程序,當做是練習工程能力和算法寫這篇文章一是記錄和分享思路,也希望獲得更多意見和建議,歡迎評論效果本來是打算最后再貼圖的,文章沒啥人氣,加上感冒偷個懶就先貼個圖吧不知道為什么沒辦法直接貼圖片, 前言 在朋友的推薦下,嘗試寫一個模擬的掃地機器人的程序,當做是練習(工程能力和算法)寫這篇文章一是記錄和分享思路,也希望獲得更多意見和建議,歡迎評...
摘要:話說我的地圖就是柵格形式用點坐標來表示格子模板模型法很容易理解,就是有幾種走法,按情況調用。 尋路模塊 (1) 終于要挑戰(zhàn)尋路模塊,雖然我是在重復造輪子,但看一下別人的輪子怎么造也是很重要的,所以在這之前首先搜索下,看看有什么現成的思路和代碼,收獲如下: 兩種尋路邏輯 有兩種尋路邏輯, 隨機碰撞和路徑規(guī)劃,考慮到: a. 隨機碰撞似乎需要不少經驗/實驗數據才能達到不錯的效果,我缺經驗/...
摘要:尋路模塊通過一番尋找,發(fā)現這系列文章,其不僅包含算法,連尋路算法中的一些基礎知識也一并介紹了,不愧是斯坦福出品,也很感謝譯者要實現點到點最短路徑,還需要做一些微小的工作,下面逐個說明計算曼哈頓距離的函數目的是尋路,肯定需要一個方法來估算兩點 尋路模塊 (2) 通過一番尋找,發(fā)現這系列文章,其不僅包含A*算法,連尋路算法中的一些基礎知識也一并介紹了,不愧是斯坦福出品,也很感謝譯者要實現點...
摘要:測試覆蓋率有什么優(yōu)勢依然是以打掃房屋為例,測試覆蓋率可以度量打掃的質量指示何時該停止打掃提醒我們還有其他地方需要清理。至此,我們可以得出結論測試自動化更高的測試覆蓋率。 ...
摘要:在全球智能新商業(yè)峰會上,億歐公司發(fā)布中國人工智能商業(yè)落地強榜單與研究報告。一定程度上,該榜單反映了人工智能在中國各細分領域的商業(yè)化程度。 人工智能商業(yè)化是什么意思?它和商業(yè)智能有怎樣的聯系?本文從概念、重大發(fā)展事件、發(fā)展趨勢這幾個方面全面解讀人工智能商業(yè)化。 121 一、概念人工智能商業(yè)化,是指人工智能走向商業(yè)化的歷程,即人工智能實現商業(yè)場景的應用。人工智能的商業(yè)化進程正一步步通過各種...
閱讀 2895·2021-11-24 09:39
閱讀 1157·2021-11-02 14:38
閱讀 4141·2021-09-10 11:26
閱讀 2743·2021-08-25 09:40
閱讀 2303·2019-08-30 15:54
閱讀 477·2019-08-30 10:56
閱讀 2738·2019-08-26 12:14
閱讀 3211·2019-08-26 12:13