我目前正在研究Pepper Robot。该项目旨在在实验室欢迎访客,并将他们引导到他想见的办公室/老师。为此,我需要让 Pepper创建她的环境地图并对自己进行本地化。
我遇到了两个问题:
- 地图的质量,
- 用这张地图导航。
好的导航意味着好的地图,但即使周围只有空闲空间,Pepper 也无法在上面导航。
我使用软银的:
- qi库(http://doc.aldebaran.com/2-4/dev/python/install_guide.html),
- 功能(http://doc.aldebaran.com/2-5/naoqi/motion/alnavigation-api.html)
下面是我的地图(注意地板反射光): 黑色是自由空间 - 白色是障碍物
- 当灯打开时, Environment with lights On
- 关灯时 关灯的 环境
为了改善地图,我进入了一个地板(地毯地板)没有反射的房间,这是我打开地毯地板地毯地板灯的地图 (环境发生了变化,但它很安静,可以通过一些想象力来识别)
目前我无法在地毯地板上测试导航,但在前两张地图上,Pepper 的动作完全不正确。此外,在 5 米的探索中,定位给了我 2 米宽和 3 米长的椭圆误差。
所以我的问题是:
- 我做错了什么吗?
- 我该如何解决我的问题?
- 这是我第一次体验导航,是不是期待太多?还是软银的功能没有效率?
我要探索的代码:
PepperSpeech = session.service("ALTextToSpeech")
PepperSpeech.say("Connexion")
PepperNavig = session.service("ALNavigation")
PepperMvt = session.service("ALMotion")
PepperMvt.wakeUp()
PepperSpeech.say("Lancement de l'exploration")
state = PepperNavig.explore(5.0)
print(state)
PepperSpeech.say("Exploration terminee")
time.sleep(2)
PepperNavig.stopExploration()
path = PepperNavig.saveExploration()
print(path)
time.sleep(2)
PepperSpeech.say("sauvegarde terminee")
loadingsuccess = PepperNavig.loadExploration(path)
print(loadingsuccess)
CurrentMap = PepperNavig.getMetricalMap()
fichier = open("Map5m312Obst.txt", "w")
print(type(CurrentMap))
print(type(CurrentMap[0]))
formatted = [format(v) for v in CurrentMap]
fichier.write(str(formatted))
fichier.close()
我的导航代码:
adress = str("/home/nao/.local/share/Explorer/2018-01-18T084351.874Z.explo")
etat = PepperNavig.loadExploration(adress)
print("etat load :")
print(etat)
Map = PepperNavig.getMetricalMap()
PepperNavig.startLocalization()
PepperNavig.relocalizeInMap([0, 0, 0])
id = PepperNavig.navigateToInMap([0, -1, 0])
PepperNavig.wait(id)
pose1 = PepperNavig.getRobotPositionInMap()
print("pose1 = " + str(pose1))
time.sleep(5)
id = PepperNavig.navigateToInMap([0, 0, 0])
PepperNavig.wait(id)
pose2 = PepperNavig.getRobotPositionInMap()
print("pose2 = " + str(pose2))
time.sleep(5)
id = PepperNavig.navigateToInMap([-1, 0, 0])
PepperNavig.wait(id)
pose2 = PepperNavig.getRobotPositionInMap()
print("pose2 = " + str(pose2))
time.sleep(5)
id = PepperNavig.navigateToInMap([0, -1, 0])
PepperNavig.wait(id)
pose3 = PepperNavig.getRobotPositionInMap()
print("pose3 = " + str(pose3))
time.sleep(5)