Последовательность контроллера Webots NAO не работает - PullRequest
0 голосов
/ 07 мая 2020

Я использую контроллер NAO_demo_ python последней версии webots на linux (ubuntu 18), чтобы засветить sh светодиоды и открыть / закрыть руками.

Однако выполняется только последняя часть последовательностей, а не за один прогон моделирования.

например, если я прошу просто открыть руку и зажечь светодиоды, после одного запуска света будет включен и после 5 прогонов основного, пока l oop он будет открываться -reaaallly медленно-. Однако, если я спрашиваю светодиоды, открытая рука, а затем закрывающая незажженные светодиоды, тогда симуляция будет только закрывать светодиоды с рукой и без света. Код должен работать, он на чужом компьютере. Если вы хотите, вот он (это действительно basi c, это небольшая модификация 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

Также кое-что, что может быть интересно: if я прошу открыть и закрыть руку N раз и каждый раз печатать что-либо, все отпечатки будут напечатаны одновременно, и время моделирования перескочит с 0: 0: 0 на 0: 0: 20 после каждого основного l oop run (+ 20 при каждом запуске), иначе, даже если симуляция запускается, время не течет, оно прыгает.

Я попытался обновить свои драйверы, чтобы убрать все тени и прочее из симуляции, как советует webots. Нет, ничего не поделаешь. Я не смог найти что-то на Softbank, я не могу найти активный форум, посвященный nao и webot ...

У меня i5 9-го поколения и GTX1050Ti.

Может проблема будь то время симуляции не 1.0x? но самое большее 0,05x? (после удаления теней, эффекта света, всех объектов, используя 1 поток et c, как описано здесь: https://www.cyberbotics.com/doc/guide/speed-performance)

РЕЗЮМЕ: только последняя последовательность контроллера выполняется, и если это движение, для полного выполнения требуется несколько основных циклов. Между тем, время меняется от 0 до +20 с после каждого основного прогона l oop.

Может кто-нибудь поможет мне заставить всю последовательность работать над симуляцией, пожалуйста :)

Ответы [ 2 ]

1 голос
/ 08 мая 2020

все отпечатки будут напечатаны одновременно

Выполняется только последняя последовательность контроллера

Похоже, что функция setHandsAngle может быть асинхронной ( не дожидается, пока рука переместится в эту точку, прежде чем запускать следующий фрагмент кода)? Это может быть причиной по крайней мере некоторых проблем, с которыми вы столкнулись. В этом случае rospy.sleep(5) следует заменить на robot.step(5000), чтобы симулятор успел переместить руку перед отправкой следующей команды.

0 голосов
/ 10 мая 2020

Благодаря вашим указаниям, это работает:

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 все еще не решена, но проблема моего первоначального вопроса остается. Спасибо!

...