资讯专栏INFORMATION COLUMN

扫地机器人的模拟程序 (1)

tanglijun / 1002人阅读

摘要:前言在朋友的推荐下,尝试写一个模拟的扫地机器人的程序,当做是练习工程能力和算法写这篇文章一是记录和分享思路,也希望获得更多意见和建议,欢迎评论效果本来是打算最后再贴图的,文章没啥人气,加上感冒偷个懒就先贴个图吧不知道为什么没办法直接贴图片,

前言

在朋友的推荐下,尝试写一个模拟的扫地机器人的程序,当做是练习(工程能力和算法)
写这篇文章一是记录和分享思路,也希望获得更多意见和建议,欢迎评论

效果

本来是打算最后再贴图的,文章没啥人气,加上感冒
偷个懒就先贴个图吧(不知道为什么没办法直接贴图片,只好贴链接了)
https://wx1.sinaimg.cn/mw1024...
https://wx4.sinaimg.cn/mw1024...

思路

想了下大概应该有下面几个模块

主模块,负责调用其他模块

地图模块,负责处理地图,比如导入外部的地图文件并转换成方便处理的格式

感知模块,负责感知当前所在位置的周围是否可通行

动作模块,负责“走动”,出于解耦的考虑,这里的动作只有最基本的走路动作,不包含寻路逻辑

寻路模块,负责调用感知模块和动作模块,做一些复杂动作,比如U形走法(听上去有点中二,先这么叫着)和最短路径走法(到最近的未清洁点)

显示模块,负责把机器人走过的路径显示出来,形式上最好是独立于程序的存在,比如gif文件

在准备写复杂模块前,首先把地图模块给写出来吧,这篇文章就专注于这个模块

地图模块

首先思考,外部的地图文件要便于创建(手工绘制),查看和被导入,于是便想到csv

1 . 在Excel中“画图”

画一个10*10的地图,其中一个格子代表一个区域,每个格子的面积先假设是0.5m*0.5m好了
可通行区域是".",不可通行区域是"#",保存成csv

2 . 通过官方的csv库来读取文件

代码如下:

import csv

file = "E:扫地机器人map_1.csv"
map = []
with open(file, newline="") as csv_file:
    f = csv.reader(csv_file)
    for row in f:
        map.append(row)

这样我们得到一个map列表
[[".", ".", ".", ".", ".", ".", ".", ".", ".", "."], .....]
其内容还是列表,每个列表代表地图中的一行,顺序是从上到下

3 . 给地图上的点/格子“编号”

虽然地图上的点可以通过map[x][y]来获得,但这么做似乎不优雅,不妨就用坐标点的形式,即(x,y)的方式来描述这些格子吧,于是:

coordinate_list = []
impassable_coordinate_list = []
for x in range(len(map)):
    for y in range(len(map[x])):
        coordinate_list.append((y, x))
        if map[x][y] == "#":
            reverse_x, reverse_y = y, len(map) - x - 1
            impassable_coordinate_list.append((reverse_x, reverse_y))

我们把所有的格子转成坐标点的形式放到coordinate_list
同时把不能通行的格子记录到impassable_coordinate_list
前者: [(0, 0), (1, 0), (2, 0),....]
后者: [(1, 8), (1, 7), (2, 4), (2, 3)]
要注意的是这里的(0,0)代表的是最左下角的那个点/格子
map模块就此告一段落

PS: 可能有读者感到奇怪,既然已经有地图了,根据所在位置和地图就知道周围的情况了,为何还要感知模块,我解释一下
我的想法是先让机器人根据完善的地图来实现部分功能,然后再逐步改善,先让感知模块根据地图来“感知”
按理说,地图模块应该要根据感知模块的反馈来不断更新的

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41275.html

相关文章

  • 扫地器人模拟程序 (2)

    摘要:上一篇文章中介绍了地图模块,接着来看主模块和动作模块主模块思路主模块由一个类构成,其调用各子模块,且其属性可用于保存信息这些信息,除了之前地图模块中的和之外,还包括初始坐标现所在坐标移动路径代码动作模块思路所谓移动,在模拟程序里就是更新现所 上一篇文章中介绍了地图模块,接着来看主模块和动作模块 主模块 思路:主模块由一个Robot类构成,其调用各子模块,且其属性可用于保存信息这些信息,...

    stormgens 评论0 收藏0
  • 扫地器人模拟程序 (3)

    摘要:话说我的地图就是栅格形式用点坐标来表示格子模板模型法很容易理解,就是有几种走法,按情况调用。 寻路模块 (1) 终于要挑战寻路模块,虽然我是在重复造轮子,但看一下别人的轮子怎么造也是很重要的,所以在这之前首先搜索下,看看有什么现成的思路和代码,收获如下: 两种寻路逻辑 有两种寻路逻辑, 随机碰撞和路径规划,考虑到: a. 随机碰撞似乎需要不少经验/实验数据才能达到不错的效果,我缺经验/...

    ccj659 评论0 收藏0
  • 扫地器人模拟程序 (4)

    摘要:寻路模块通过一番寻找,发现这系列文章,其不仅包含算法,连寻路算法中的一些基础知识也一并介绍了,不愧是斯坦福出品,也很感谢译者要实现点到点最短路径,还需要做一些微小的工作,下面逐个说明计算曼哈顿距离的函数目的是寻路,肯定需要一个方法来估算两点 寻路模块 (2) 通过一番寻找,发现这系列文章,其不仅包含A*算法,连寻路算法中的一些基础知识也一并介绍了,不愧是斯坦福出品,也很感谢译者要实现点...

    thekingisalwaysluc 评论0 收藏0
  • 自动化会提高测试覆盖率,那测试覆盖率是什么?

    摘要:测试覆盖率有什么优势依然是以打扫房屋为例,测试覆盖率可以度量打扫的质量指示何时该停止打扫提醒我们还有其他地方需要清理。至此,我们可以得出结论测试自动化更高的测试覆盖率。 ...

    lyning 评论0 收藏0
  • 人工智能商业化全面解析,内含趋势解读

    摘要:在全球智能新商业峰会上,亿欧公司发布中国人工智能商业落地强榜单与研究报告。一定程度上,该榜单反映了人工智能在中国各细分领域的商业化程度。 人工智能商业化是什么意思?它和商业智能有怎样的联系?本文从概念、重大发展事件、发展趋势这几个方面全面解读人工智能商业化。 121 一、概念人工智能商业化,是指人工智能走向商业化的历程,即人工智能实现商业场景的应用。人工智能的商业化进程正一步步通过各种...

    Amos 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<