机器人概率定位学习笔记第四篇_使用python进行机器人概率定位
2016-10-03 23:09
501 查看
本笔记学习于优达学城 Artificial Intelligence for Robotics课程
1,机器人定位问题其实就是机器人运动与感知问题,在一个世界中感知,运动,不断循环。如下图
2,下面我们正式开始写一个完整的机器人概率定位系统,首先假设这个世界
[green red red green green]
机器人开始感知第一次感知到红色,然后向右走了一步,然后感知到绿色,然后向又右走了一步,问最后机器人在那个方格的概率最大,很明显机器人在第四个绿色的方格中概率最大,下面我们用代码来实现吧
#Given the list motions=[1,1] which means the robot
#moves right and then right again, compute the posterior
#distribution if the robot first senses red, then moves
#right one, then senses green, then moves right again,
#starting with a uniform prior distribution.
p=[0.2, 0.2, 0.2, 0.2, 0.2]
world=['green', 'red', 'red', 'green', 'green']
measurements = ['red', 'green']
motions = [1,1]
pHit = 0.6
pMiss = 0.2
pExact = 0.8
pOvershoot = 0.1
pUndershoot = 0.1
def sense(p, Z):
q=[]
for i in range(len(p)):
hit = (Z == world[i])
q.append(p[i] * (hit * pHit + (1-hit) * pMiss))
s = sum(q)
for i in range(len(q)):
q[i] = q[i] / s
return q
def move(p, U):
q = []
for i in range(len(p)):
s = pExact * p[(i-U) % len(p)]
s = s + pOvershoot * p[(i-U-1) % len(p)]
s = s + pUndershoot * p[(i-U+1) % len(p)]
q.append(s)
return q
for i in range(len(motions)):
p=sense(p,measurements[i])
p=move(p,motions[i])
print p
[0.21157894736842103, 0.1515789473684211, 0.08105263157894739, 0.16842105263157897, 0.3873684210526316]
1,机器人定位问题其实就是机器人运动与感知问题,在一个世界中感知,运动,不断循环。如下图
2,下面我们正式开始写一个完整的机器人概率定位系统,首先假设这个世界
[green red red green green]
机器人开始感知第一次感知到红色,然后向右走了一步,然后感知到绿色,然后向又右走了一步,问最后机器人在那个方格的概率最大,很明显机器人在第四个绿色的方格中概率最大,下面我们用代码来实现吧
#Given the list motions=[1,1] which means the robot
#moves right and then right again, compute the posterior
#distribution if the robot first senses red, then moves
#right one, then senses green, then moves right again,
#starting with a uniform prior distribution.
p=[0.2, 0.2, 0.2, 0.2, 0.2]
world=['green', 'red', 'red', 'green', 'green']
measurements = ['red', 'green']
motions = [1,1]
pHit = 0.6
pMiss = 0.2
pExact = 0.8
pOvershoot = 0.1
pUndershoot = 0.1
def sense(p, Z):
q=[]
for i in range(len(p)):
hit = (Z == world[i])
q.append(p[i] * (hit * pHit + (1-hit) * pMiss))
s = sum(q)
for i in range(len(q)):
q[i] = q[i] / s
return q
def move(p, U):
q = []
for i in range(len(p)):
s = pExact * p[(i-U) % len(p)]
s = s + pOvershoot * p[(i-U-1) % len(p)]
s = s + pUndershoot * p[(i-U+1) % len(p)]
q.append(s)
return q
for i in range(len(motions)):
p=sense(p,measurements[i])
p=move(p,motions[i])
print p
[0.21157894736842103, 0.1515789473684211, 0.08105263157894739, 0.16842105263157897, 0.3873684210526316]
相关文章推荐
- 机器人概率定位学习笔记第二篇_使用python建立机器人感知函数(sense fuction)
- 机器人概率定位学习笔记第三篇_使用python建立机器人运动函数(move fuction)
- 机器人概率定位学习笔记第一篇_基本概念
- Python OpenCV学习笔记之:使用Grabcut算法进行图像背景和前景分割
- 8. Python脚本学习实战笔记八 使用XML-RPC进行文件共享
- 【学习笔记】使用Python对文件进行简单操作
- Turtlebot学习指导第四篇_使用robot_pose_ekf包,EKF(扩展卡尔曼滤波器)对机器人位置进行校正
- xml学习笔记(6)使用Dom4j对xml文档进行dom解析
- 微软企业库4.1学习笔记(十四)缓存模块2 使用缓存模块进行开发
- OpenCV学习笔记(8)VS2008 MFC下使用OpenCV2.0进行简单图像处理
- linux 学习笔记 (3) —— 使用python
- python学习笔记:datetime使用小结
- python学习笔记+使用技巧
- python2学习笔记 第三章 使用字符串
- mongoDB学习笔记3--python下使用
- JPA学习笔记---JPA数据的操作:增加,删除,修改,获取,使用JPQL进行查询
- 微软企业库4.1学习笔记(十四)缓存模块2 使用缓存模块进行开发
- Effective C# 学习笔记(十五)使用Using和Try/Finally 进行资源清理
- [学习笔记]使用py2exe打包python程序
- 【Java学习笔记】使用Collator进行本地化语言的排序