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仍未解决,但我最初的问题是。谢谢!
我正在 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仍未解决,但我最初的问题是。谢谢!