Python 使用软库库的Pepper制图和导航

Python 使用软库库的Pepper制图和导航,python,localization,navigation,pepper,Python,Localization,Navigation,Pepper,我目前正在研制一个胡椒机器人。该项目旨在在实验室欢迎来访者,并引导他们到他想见的办公室/老师。 为此,我需要让Pepper创建她的环境地图,并定位自己 我遇到了两个问题: 地图的质量 使用此地图进行导航 一个好的导航意味着一个好的地图,但即使周围只有空闲空间,Pepper也无法在上面导航 我使用软银的: qi图书馆() 功能() 下面是我的地图(注意地板反射光线): 黑色是自由空间,白色是障碍 当灯打开时, 当灯熄灭时 为了更好地绘制地图,我去了一个地板上没有反射的房间(地毯地板

我目前正在研制一个胡椒机器人。该项目旨在在实验室欢迎来访者,并引导他们到他想见的办公室/老师。 为此,我需要让Pepper创建她的环境地图,并定位自己

我遇到了两个问题:

  • 地图的质量
  • 使用此地图进行导航
一个好的导航意味着一个好的地图,但即使周围只有空闲空间,Pepper也无法在上面导航

我使用软银的

  • qi图书馆()
  • 功能()
下面是我的地图(注意地板反射光线): 黑色是自由空间,白色是障碍

  • 当灯打开时,
  • 当灯熄灭时
为了更好地绘制地图,我去了一个地板上没有反射的房间(地毯地板),这是我在地毯地板上绘制的地图 (环境发生了变化,但它是安静的,可以通过一些想象辨认出来)

目前,我无法在地毯上测试导航,但在前两张地图上,胡椒的移动是完全错误的。此外,在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)
  • 我做错什么了吗
  • 我怎样才能解决我的问题
  • 这是我第一次体验导航,我是不是期望太高了?还是软银的功能不高效
我要浏览的代码:

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)
我的导航代码:

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)

您似乎以正确的顺序调用了正确的API。 但是如果机器人周围有有效的自由空间,地图应该是白色的,而不是黑色的。 你说“黑色是自由空间,白色是障碍物”,通常情况下是相反的。 像素的颜色表示区域空闲的概率: -1.0(此处为100)表示自由区域 -0.0(或0)表示非自由区域,因此 您可以在此处找到工作代码示例:

“椭圆误差2米宽3米”意味着你的机器人迷路了。可能是重新定位的InMap([0.0,0.0,0.0])进展不顺利。
呼叫前机器人是否正确放置在(0.0,0.0)位置?

如果您还没有,更新到NAOqi 2.7应该可以改善导航

根据我的经验,柔软的地毯地板既可能吸收激光,也可能导致里程计不准确。因此妨碍了航行。谢谢你的建议。我会做进一步的测试来找出问题的确切原因。黑地毯比反射地面效果更好。我使用了下面的编舞软件包,无论地面情况如何,它都能工作得更好。谢谢你的帮助。要绘制地图,我使用以下matlab代码:MapArray=Map5m312SansObst;lengthMap=长度(MapArray);sizeMatrix=sqrt(长度映射);MapMatrix=重塑(MapArray、sizeMatrix、sizeMatrix);图(1)imshow(MapMatrix,[0 100])我在完全自由区环境中尝试过,但地图是用黑色填充的,所以我猜黑色是自由区。承认这一点,导航是安静混乱的(我尝试了一个一米见方,每边使用四个导航地图)。如果佩珀“认为”自己被困在障碍物中,这或许可以解释。也许吧?谢谢你,地图好多了!导航也是如此!好吧,我试试看,但我的同事们正在研究2.5.7。如果我在2.7中工作,我的同事在2.5.7版本中工作,是否存在兼容性问题?这是一个好问题。我没有听说过任何问题,但同时我不知道有多少开发人员采用了新版本。好的,我会尽快尝试,保持联系。我已经检查了2.7版本。这对我帮助很大,但我找不到任何下载的地方,甚至在软银的网站上也找不到。试着向支援部门请求,并给他们你机器人的头部ID。首先仔细阅读更改列表,有些模块不推荐使用: