Chinese, Simplified subtitles

← Localization Program Solution - Artificial Intelligence for Robotics

Get Embed Code
3 Languages

Showing Revision 1 created 10/02/2016 by Udacity Robot.

  1. 这里是我的答案
  2. 这个对于上课的人来说很简单 但是我还是为你感到骄傲如果你作对了
  3. 因为这个允许你编写你自己的定位算法
  4. 跟我们给Google自动驾驶汽车用的算法很类似
  5. 首先我先定义两个变量
  6. 我让sensor_wrong等于1.0减去sensor_right的概率
  7. 然后原地不动的概率 也就是运动指令失败
  8. 是1.0 减去p_move的概率
  9. 我们慢慢往下看
  10. 我先开始我的主流程
  11. 实际上我加入了一个小的检测步骤确保观测矢量的长度
  12. 跟运动矢量的长度一致 如果不一样程序会给我一个错误信息
  13. 当然了 对于你来说这一步并不必要
  14. 我这样做是因为我想让我的程序看起来好看
  15. 然后我初始化我的概率表格
  16. 我根据环境的尺寸计算出了平均分布的概率值
  17. 行数乘以列数
  18. 然后1除以这个乘积
  19. 结果就是初始分布值
  20. 这个地方的这个值是根据颜色矩阵制作的分布矩阵
  21. 初始值是pinit
  22. 这两行给了我一个初始的均匀分布 然后我开始循环
  23. 我的循环数量是观测数据的数量 同样也是运动指令的数量
  24. 我先通过输入当前的分布表来用move指令来进行移动
  25. 并且还输入了运动指令来获得新的分布表
  26. 然后我用了同样的方式来允许观察指令
  27. 我把我目前的分布 这个时间 和观测数据
  28. 作为输入值来获得新的概率分布
  29. 当我完成了全部观测和运动的循环
  30. 我获得了最终分布
  31. 这就是主流程
  32. 我现在明确move和sense方程
  33. 我们从sense开始
  34. 这是我的sense流程 从这开始到这里结束
  35. 我把概率分布和世界地图作为输入
  36. 他们两个有相同的尺寸 还有明确的观测值 不是红色就是绿色
  37. 我构建了新的后验概率分布
  38. 里面的数值都初始为0 并且跟p的尺寸一样
  39. 在这个内部循环里 我遍历国全部的格子中的元素
  40. 我计算出观测值跟格子里的颜色是不是一样
  41. 如果一样就是hit
  42. 我的未标准化后验概率是先验概率乘以这个总和
  43. 使用sensor_right如果观测是正确的
  44. 使用sensor_wrong 如果观测结果不正确
  45. 最后我把aux里的值都加在一起 得到变量s
  46. 下面这里我可以对aux进行标准化所以全部分布加起来等于1 然后返回这个矩阵
  47. move指令的输入值是一个分布表和运动指令
  48. 它构建一个新的分布表aux然后设定成0
  49. 现在我遍历每个格子 并且在每一个格子中我收集了
  50. 我们的机器人可能来到这个位置的格子
  51. p_move的概率确实进行了移动
  52. 这个也就是目前的坐标 i 减去运动指令
  53. 这样做的原因你要往前回溯一个循环
  54. 这里有个截断 表示数列是循环的
  55. 我们对坐标 j 也做同样的事情 让我们往下看
  56. 这是 j 减去运动指令 同样这个是循环的
  57. 但是也有可能我们没有移动 这样我们就是
  58. 这个格子的概率乘以原地不动的概率
  59. 这行代码现在计算出 i 行 j 列的概率
  60. 我没有对结果进行标准化 因为我们没有用贝叶斯法则
  61. 我只用返回对应的后验分布
  62. 我还定义了一个 show 来遍历整个概率表
  63. 并展示出所有p 的概率矢量
  64. 这样比直接打印 p 看起来更整齐
  65. 如果我把这个特定的环境在我的程序里运行
  66. 它用 1/20 初始化 p 因为一共有20个格子
  67. 然后跑5次运动和观测的循环
  68. 更新每次的结果 最后告诉我最后的结果
  69. 就像我之前解释过的 答案跟这个一样
  70. 如果你做正确了 说明你完成了一项了不起的成就
  71. 你刚刚编写了Google自动驾驶定位理论的核心部分
  72. 当然在Google的情况里 世界不会只是红色或绿色
  73. 在Google的情况里这会是一个对路面进行了仔细转换的2D平面模型
  74. 但是这不影响我们刚刚编写过的代码
  75. 它不过是让观测方程变得有些复杂而已
  76. 事实上我们刚刚编写的代码以及抓住了核心部分
  77. 用于Google在定位时的概率推断
  78. 如果你写出了这段程序 你刚刚将之前那种简单的
  79. 把测量的整个图像记录跟
  80. 图像地图进行对比
  81. 我把这些留给你做练习 因为我不是在python环境里做的这个工作
  82. 但是我还是恭喜你因为你真的掌握了一个非常惊人的东西
  83. 就是构建了定位软件关键的一部分