Webots NAO 控制器序列不工作

Webots NAO controller sequence not working

我正在 linux (ubuntu 18) 上使用最新版 webots 的 NAO_demo_python 控制器来闪烁 LED 和 open/close 指针。

但是只执行了序列的最后一部分,而不是在单个模拟中执行 运行。

例如如果我要求只打开手并点亮 LED,在 1 运行 之后,灯将亮起,在主 while 循环的 5 运行 秒之后,它将打开 - 非常缓慢 -。但是,如果我要求点亮的 LED,张开手然后合上手未点亮的 LED,那么模拟将只合上手和未点亮的 LED。 该代码应该可以工作,它在另一个人的计算机上。如果你想要它,它是(它真的很基本,它是对 nao-demo-python.py 的轻微修改):

def run(self):
    while robot.step(self.timeStep) != -1:
        self.setAllLedsColor(0xff0000) #red leds on
        self.setHandsAngle(0.96)   #open hand
        #rospy.sleep(5)  #originally i am to use webots and nao with ros
        print("done") #to check how many runs are made
        self.setHandsAngle(0.0) #close hand
        self.setAllLedsColor(0x000000) #red leds off

此外,可能还有一些有趣的事情:如果我要求手打开并合上 N 次并且每次都打印一些东西,所有打印件将立即打印并且模拟时间从 0:0:0 跳到 0:0:20 在每个主循环 运行 之后(每次 运行 +20),否则,即使模拟 运行s 时间不流动,它也会跳转。

我尝试更新我的驱动程序,按照 webots 的建议从模拟中删除所有阴影和东西。没有办法。我在 Softbank 上找不到任何东西,我再也找不到关于 nao 和 webots 的活跃论坛...

我有 i5 9th gen 和 GTX1050Ti。

问题可能是模拟时间不是 1.0 倍?但最多 0.05 倍? (在去除阴影、灯光效果、所有对象、使用 1 个线程等之后,如此处解释:https://www.cyberbotics.com/doc/guide/speed-performance

总结:只执行控制器的最后一个序列,如果它是一个动作,则在完全执行之前需要几个主循环。同时,在每个主循环 运行 之后,时间从 0 跳到 +20s。

请有人帮我让所有​​的序列在模拟上工作:)

all the prints will be printed at once

Only the last sequence of the controller is executed

听起来 setHandsAngle 函数可能是异步的(在 运行 下一段代码之前不等待手移动到那个点)?这可能至少是您遇到的一些问题的原因。在这种情况下,rospy.sleep(5) 应替换为 robot.step(5000),因此模拟器有时间在发送下一个命令之前移动手。

感谢您的指点,这有效:

self.CloseHand = Motion('../../motions/closeHand.motion') 

def startMotion(self, motion): 

    if self.currentlyPlaying: #interrupt current motion 
        self.currentlyPlaying.stop() 

    motion.play() #start new motion 
    self.currentlyPlaying = motion 


self.startMotion(self.CloseHand) 
while not self.CloseHand.isOver(): 
    robot.step(self.timeStep)

并且在 CloseHand.motion 中:

#WEBOTS_MOTION,V1.0,LPhalanx1,RphalanxN (until 9)
00:00:000,Pose1,0.00,0.00 etc

00:00:000 执行时刻和 0.00 手的角度(一个方阵一个方阵)。

非常感谢!没有你的建议,我无法意识到这一点。

同步webots/ros仍未解决,但我最初的问题是。谢谢!