Webots NAO控制器序列不工作

2024-10-02 10:32:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用linux上最新版本的webots(Ubuntu18)的NAO_demo_python控制器来闪烁LED并打开/关闭双手

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

例如,如果我要求只打开手并点亮LED,则在运行1次后,指示灯将点亮,在运行5次主while回路后,指示灯将缓慢打开。但是,如果我询问点亮的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),否则,即使模拟运行时间不流动,它也会跳

我试图更新我的驱动程序,从模拟中去除所有阴影和东西,正如webots建议的那样。不行。我在软银上找不到什么东西,我再也找不到关于nao和webots的活跃论坛了

我有第9代i5和GTX1050Ti

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

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

有人能帮我把所有的序列都放在模拟上吗:)


Tags: selfleddemo时间序列red控制器hand
2条回答

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)

在紧握的手上。动作:

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

00:00:000为执行时刻,0.00为手的角度(方阵接方阵)

多谢各位!没有你的建议,我不可能意识到这一点

同步webots/ros仍然没有解决,但我最初的问题是。谢谢大家!

相关问题 更多 >

    热门问题