寻找机器人在房子里定位的方法

2023-12-31

我正在破解一个吸尘器机器人用微控制器(Arduino)控制它。我想要做到打扫房间时更有效率。目前,它只是直行并在碰到物体时转向。

但我很难找到最佳算法或方法用于知道它在房间中的位置。我正在寻找一种既便宜(不到 100 美元)又不太复杂(不需要计算机视觉博士学位论文)的想法。如果需要的话,我可以在房间里添加一些离散的标记。

现在,我的机器人有:

  • 一个网络摄像头
  • 三个接近传感器(约 1 米范围)
  • 指南针(暂时不用)
  • Wi-Fi
  • 如果电池充满或几乎耗尽,其速度可能会有所不同
  • 上网本Eee PC http://en.wikipedia.org/wiki/Asus_Eee_PC嵌入在机器人上

你有这样做的想法吗?对于此类问题是否存在任何标准方法?

注意:如果这个问题属于其他网站,请移走它,我找不到比 Stack Overflow 更好的地方了。


确定机器人在其环境中的位置的问题称为本土化 http://en.wikipedia.org/wiki/Robot_localization。计算机科学研究人员多年来一直试图解决这个问题,但成效有限。一个问题是,您需要相当好的感官输入来确定自己所在的位置,而来自网络摄像头(即计算机视觉)的感官输入远未解决。

如果这没有吓到您:我发现最容易理解的本地化方法之一是粒子过滤 http://en.wikipedia.org/wiki/Particle_filter。这个想法是这样的:

  1. 你跟踪一堆粒子,每个代表环境中一个可能的位置。
  2. 每个粒子还有一个关联的可能性这告诉您您对粒子真正代表您在环境中的真实位置的信心有多大。
  3. When you start off, all of these particles might be distributed uniformly throughout your environment and be given equal probabilities. Here the robot is gray and the particles are green. initial particle filter
  4. When your robot moves, you move each particle. You might also degrade each particle's probability to represent the uncertainty in how the motors actually move the robot. particles after movement
  5. When your robot observes something (e.g. a landmark seen with the webcam, a wifi signal, etc.) you can increase the probability of particles that agree with that observation. particles after observation
  6. 您可能还想根据观察结果定期用新粒子替换概率最低的粒子。
  7. 要确定机器人的实际位置,您可以使用概率最高的粒子、概率最高的簇、所有粒子的加权平均值等。

如果你稍微搜索一下,你会发现很多例子:例如机器人使用粒子过滤来确定其在小房间中的位置的视频 http://www.youtube.com/watch?v=AMX_OcweGv0.

粒子过滤很好,因为它很容易理解。这使得实施和调整它变得不那么困难。还有其他类似的技术(例如卡尔曼滤波器 http://en.wikipedia.org/wiki/Kalman_filter)这在理论上可能更合理,但可能更难理解。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

寻找机器人在房子里定位的方法 的相关文章

  • 贪心算法的使用示例?

    贪心算法有什么用 一个真实的例子 最小生成树 Prim http en wikipedia org wiki Prim s algorithm的算法和克鲁斯卡尔的 http en wikipedia org wiki Kruskal s a
  • 使用回溯(而不是 DFS)背后的直觉

    我正在解决单词搜索 https leetcode com problems word search description LeetCode com 上的问题 给定一个 2D 板和一个单词 查找该单词是否存在于网格中 该单词可以由顺序相邻单
  • 使用Redis从有限范围内生成唯一ID

    我有一些数据库项目 除了主键之外 还需要项目所属组的唯一索引 我们来调用属性nbr 以及将项目分组在一起并定义唯一范围的属性nbr 我们会打电话group This nbr必须在 1 N 范围内 并且may从外部源导入项目时进行设置 由于所
  • 计算标签云中标签字体大小的公式是什么?

    我有一个标签云 我需要知道如何更改最常用标签的字体大小 我需要设置最小字体大小和最大字体大小 您可以使用线性或对数评估与某个标签相对于最大标签关联的项目数量 将其乘以最小和最大字体大小之间的差值 然后将其添加到最小字体大小 例如 伪代码中的
  • 树中的节点是否被视为其自己的祖先?

    我想知道计算机科学背景下对 祖先 定义的共识是什么 我问只是因为在算法简介 http en wikipedia org wiki Introduction to Algorithms 第二版 第 14 页 第259章 有算法的描述Tree
  • 将区间映射到更小的区间的算法

    我尝试搜索 但由于问题的性质 我无法找到满意的内容 我的问题如下 我试图将 0 到 2000 范围内的数字 尽管理想情况下上限是可调的 映射到 10 到 100 范围内的更小的区间 上限将映射 2000 gt 100 和下限也是如此 除此之
  • 比较周期性数据的快速方法

    假设我有任意类型的数据集 A B C D 并且我想将其与另一个数据集进行比较 我希望 A B C D B C D A C D A B 和 D A B C 的比较成立 但是不适用于 A C B D 或任何其他未类似排序的集合 有什么快速方法可
  • 找到两个移动物体的更好交点

    我想极大地优化我的算法之一 我将尽力以最好的方式解释它 主题 我们当时处于二维欧几里德系统中t 0 在这个系统中有两个对象 O1 and O2 O1 and O2分别位于点PA and PC O1移动于常数和已知点方向的速度PB 当物体到达
  • 用 ruby​​ 解决旅行商问题(50 多个位置)

    我在一家快递公司工作 目前 我们 手动 解决了 50 多个地点的路线 我一直在考虑使用 Google Maps API 来解决这个问题 但我读到有 24 点的限制 目前我们在服务器中使用 Rails 因此我正在考虑使用 ruby 脚本来获取
  • Bellman-Ford 算法检测什么?负重还是负循环?

    如果给定一个图 现在我们要从源头计算最短路径 现在 如果一条边具有负权重 但在到达目的地时有边到后边返回到该边 我的意思是如果没有循环 那么我们就没有负循环 但是here http en wikipedia org wiki Bellman
  • 如何在 Arduino 中将 char 变量作为数字打印到串行端口?

    我正在使用 Arduino Uno 我正在从 EEPROM 读取一个字节值并将该值存储在类型变量中char 1 字节 我想将变量的值作为数字 而不是相应的 ASCII 代码 打印到串行监视器 例如考虑char val 5 我想查看串行监视器
  • 如何将定位模式从默认模式更改为“高精度/省电”(仅限设备)

    我正在尝试使用本教程实现谷歌地图来获取当前位置 Android 谷歌地图教程 https www androidtutorialpoint com intermediate android map app showing current l
  • google.maps.Geocoder.geocode() Geometry.location lat/lng 属性名称经常更改

    我有一个应用程序 我正在使用 Google Javascript 地理编码 API 来获取地址的纬度 经度 代码是这样的 geocoder new google maps Geocoder geocoder geocode address
  • 在关键服务器上对字符串进行内存受限的外部排序,并合并和计算重复项(数十亿个文件名)

    我们的服务器生成如下文件 c521c143 2a23 42ef 89d1 557915e2323a sign xml在其日志文件夹中 第一部分是GUID 第二部分是名称模板 我想计算具有同名模板的文件的数量 例如 我们有 c521c143
  • 从鼠标位置获取地图纬度经度

    我正在尝试将鼠标在谷歌地图上的位置转换为 LatLng 对象 我看到很多关于通过谷歌地图 点击 事件等获取位置的帖子 如下所示 google maps event addListener map click function event m
  • 在 Java 中实现排列算法的技巧

    作为学校项目的一部分 我需要编写一个函数 该函数将接受整数 N 并返回数组 0 1 N 1 的每个排列的二维数组 该声明看起来像 public static int permutations int N 该算法描述于http www usn
  • 如何查找给定字符串中仅出现一次的第一个字符[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 编程 Pearls - 随机选择算法

    Programming Pearls 第一版第 120 页介绍了从 N 个整数总体中选择 M 个等概率随机元素的算法 InitToEmpty Size 0 While Size lt M do T RandInt 1 N if not Me
  • 如何使用基于HM-10蓝牙模块的BLE Shield?

    我是 arduino 项目的新手 我想请你帮忙 我从 http imall iteadstudio com development platform arduino shields im130704001 html http imall i
  • 使用C标准数学库精确计算标准正态分布的CDF

    标准 C 数学库不提供计算标准正态分布 CDF 的函数 normcdf 然而 它确实提供了密切相关的函数 误差函数 erf 和互补误差函数 erfc 计算 CDF 的最快方法通常是通过误差函数 使用预定义常量 M SQRT1 2 来表示 d

随机推荐

  • 如何在 Tkinter 中使用 Canvas 绘制点?

    我想在Tkinter中画一个点 现在我正在使用Canvas做到了 但我没有找到这样的方法来画点Canvas class Canvas提供了一个方法叫做crete line x1 y1 x2 y2 所以我尝试设置x1 x2 y1 y2画一个点
  • 自动检查父复选框

    我有一个 AJAX 请求 该请求会拉入一个文件夹列表 每个列表项旁边都有一个复选框 如果我选中父文件夹旁边的复选框 则会通过执行以下操作自动检查所有子文件夹 var checkChildCheckBoxes function var isA
  • 容器启动后在 Docker 上运行 mongorestore

    我正在尝试设置一个运行 MongoDB 的容器 该容器在启动时使用 mongorestore 填充数据 这个想法是快速建立一个用于测试和模拟的虚拟数据库 我的 Dockerfile 如下所示 FROM mongo bionic COPY d
  • 在 Eclipse Neon 中启用 JSDT 大纲视图

    显示 JavaScript 源文件内容的大纲视图问题并不新鲜 而且它甚至找到了答案 https stackoverflow com a 11062205 2749913 然而 这个答案在 Neon 4 6 0 中不再有效 我打开了在两个单独
  • Delphi增量变化?从 D7 到 D2009

    是否有网站或文档详细说明每个版本所做的更改 比如说 D7 gt D2005 gt D2006 gt D2007 gt D2009 语言特点 数据库功能 RTTI IDE 必须查看 Google 缓存才能找到其中的几个 Delphi 2005
  • Nvidia 驱动程序更新后无法在 Qt 5.3 上编译 GLSL 着色器

    我有一些非常基本的 openGL 着色器 用于编译 但在 Nvidia 驱动程序更新后不再编译 每个着色器都以以下行开头 版本150核心 我曾经使用 QGLShaderProgram addShaderFromSourceFile 方法编译
  • 简单的 C++ 继承示例,有什么问题吗? [复制]

    这个问题在这里已经有答案了 可能的重复 派生类中具有相同名称但不同签名的函数 https stackoverflow com questions 411103 function with same name but different si
  • 错误:验证失败:可成像的图像必须存在,rails-5.0,paperclip-5

    当我尝试提交表单时 发生以下错误 Validation failed Images imageable must exist并渲染相同的new html erb view 如果我评论file field in new html erb 产品
  • 如何清除 System.Net 客户端 DNS 缓存?

    我在更改 HOSTS 文件时使用 NET WebRequest 我发现 System Net 不遵守这些更改 我怎样才能让它这样做 我有许多服务器在单个主机名后面进行负载平衡 比方说 example com 我想单独定位其中的几个 因此我的
  • 如何为每个 CSV 文件创建单独的 Pandas DataFrame 并给它们指定有意义的名称?

    我已经彻底搜索过 但找不到我在这个问题上寻找的指导 所以我希望这个问题不是多余的 我有几个代表光栅图像的 csv 文件 我想对它们进行一些统计分析 所以我尝试为每个文件创建一个 Pandas 数据框 这样我就可以将它们切片并绘制它们 但我在
  • 我应该使用shared_ptr还是unique_ptr

    我一直在使用 pimpl 习惯用法制作一些对象 但我不确定是否使用std shared ptr http en cppreference com w cpp memory shared ptr or std unique ptr http
  • Activity 中的多个 ViewPager

    我试图在一项活动中实现多个 ViewPager 但它并没有真正起作用 实现这一点的最佳方法是什么 我被困住了 这是活动 import android app Activity import android os Bundle import
  • 如何使用 Google TTS java 客户端修复“无法找到策略‘pick_first’”?

    我无法使用 Java 中的 Google TTS 客户端库发出请求 每次它都会抛出一堆异常 我只是尝试获取可用声音的列表 GoogleCredentials creds null TextToSpeechClient textToSpeec
  • 多个 THEN 到单个 CASE 语句?

    我想添加一个额外的列 这个额外的列将根据 case 语句获得一个值 例如 我的目标是 尽管语法非常错误 但要完成此任务 当 A 然后 Apple AND ExtraColumn 1 我尝试使用下面的代码创建与此等效的代码 但收到错误消息 指
  • 检查是否安装了 SQL CE 的最佳方法,如果安装了,是什么版本?

    我编写了一个使用 SQL CE 3 5 的 VB NET 应用程序 我很好奇是否有人有任何最佳实践或代码来帮助检查 A SQL CE 是否已安装以及 B 如果安装了 是什么版本 我搜索了 msdn 和 google 来查找任何内容 但没有发
  • 我想从 XML 文件加载数据并显示在列表框中?

    我有三门课 首先是人 public class Person public string FirstName get set public string LastName get set public string Email get se
  • 如何在张量流中显式广播张量以匹配另一个张量的形状?

    我有三个张量 A B and C在张量流中 A and B都是形状 m n r C是形状的二元张量 m n 1 我想根据以下值从 A 或 B 中选择元素C 显而易见的工具是tf select 但是它没有广播语义 所以我需要首先显式广播C与
  • SQL JOIN 中的重复记录

    我在 SQL 查询中得到多个结果 我有三个表 付款 信用和费用 在每个月末 我需要根据帐户持有人 我们称之为所有者 进行余额转发 我尝试了不同的查询 但不断收到重复的行 我知道这与我的WHERE条款 但我不知道如何解决它 在我的测试数据中
  • CUDA 链接错误 - Visual Express 2008 - 由于(空)配置文件导致 nvcc 致命

    在过去的两周里 我一直在广泛寻找可能的解决方案来解决我的错误 我已经成功安装了Cuda 64位编译器 工具 和SDK以及64位版本的Visual Studio Express 2008和带有Framework 3 5的Windows 7 S
  • 寻找机器人在房子里定位的方法

    我正在破解一个吸尘器机器人用微控制器 Arduino 控制它 我想要做到打扫房间时更有效率 目前 它只是直行并在碰到物体时转向 但我很难找到最佳算法或方法用于知道它在房间中的位置 我正在寻找一种既便宜 不到 100 美元 又不太复杂 不需要