国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

掃地機器人的模擬程序 (2)

stormgens / 2491人閱讀

摘要:上一篇文章中介紹了地圖模塊,接著來看主模塊和動作模塊主模塊思路主模塊由一個類構成,其調用各子模塊,且其屬性可用于保存信息這些信息,除了之前地圖模塊中的和之外,還包括初始坐標現所在坐標移動路徑代碼動作模塊思路所謂移動,在模擬程序里就是更新現所

上一篇文章中介紹了地圖模塊,接著來看主模塊和動作模塊

主模塊

思路:
主模塊由一個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)

    摘要:前言在朋友的推薦下,嘗試寫一個模擬的掃地機器人的程序,當做是練習工程能力和算法寫這篇文章一是記錄和分享思路,也希望獲得更多意見和建議,歡迎評論效果本來是打算最后再貼圖的,文章沒啥人氣,加上感冒偷個懶就先貼個圖吧不知道為什么沒辦法直接貼圖片, 前言 在朋友的推薦下,嘗試寫一個模擬的掃地機器人的程序,當做是練習(工程能力和算法)寫這篇文章一是記錄和分享思路,也希望獲得更多意見和建議,歡迎評...

    tanglijun 評論0 收藏0
  • 掃地器人模擬程序 (3)

    摘要:話說我的地圖就是柵格形式用點坐標來表示格子模板模型法很容易理解,就是有幾種走法,按情況調用。 尋路模塊 (1) 終于要挑戰(zhàn)尋路模塊,雖然我是在重復造輪子,但看一下別人的輪子怎么造也是很重要的,所以在這之前首先搜索下,看看有什么現成的思路和代碼,收獲如下: 兩種尋路邏輯 有兩種尋路邏輯, 隨機碰撞和路徑規(guī)劃,考慮到: a. 隨機碰撞似乎需要不少經驗/實驗數據才能達到不錯的效果,我缺經驗/...

    ccj659 評論0 收藏0
  • 掃地器人模擬程序 (4)

    摘要:尋路模塊通過一番尋找,發(fā)現這系列文章,其不僅包含算法,連尋路算法中的一些基礎知識也一并介紹了,不愧是斯坦福出品,也很感謝譯者要實現點到點最短路徑,還需要做一些微小的工作,下面逐個說明計算曼哈頓距離的函數目的是尋路,肯定需要一個方法來估算兩點 尋路模塊 (2) 通過一番尋找,發(fā)現這系列文章,其不僅包含A*算法,連尋路算法中的一些基礎知識也一并介紹了,不愧是斯坦福出品,也很感謝譯者要實現點...

    thekingisalwaysluc 評論0 收藏0
  • 自動化會提高測試覆蓋率,那測試覆蓋率是什么?

    摘要:測試覆蓋率有什么優(yōu)勢依然是以打掃房屋為例,測試覆蓋率可以度量打掃的質量指示何時該停止打掃提醒我們還有其他地方需要清理。至此,我們可以得出結論測試自動化更高的測試覆蓋率。 ...

    lyning 評論0 收藏0
  • 人工智能商業(yè)化全面解析,內含趨勢解讀

    摘要:在全球智能新商業(yè)峰會上,億歐公司發(fā)布中國人工智能商業(yè)落地強榜單與研究報告。一定程度上,該榜單反映了人工智能在中國各細分領域的商業(yè)化程度。 人工智能商業(yè)化是什么意思?它和商業(yè)智能有怎樣的聯系?本文從概念、重大發(fā)展事件、發(fā)展趨勢這幾個方面全面解讀人工智能商業(yè)化。 121 一、概念人工智能商業(yè)化,是指人工智能走向商業(yè)化的歷程,即人工智能實現商業(yè)場景的應用。人工智能的商業(yè)化進程正一步步通過各種...

    Amos 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<