iRobot Create - 播放两首歌曲

时间:2014-11-13 00:46:50

标签: python robotics robot mobile-robots

这是我的代码:

import create 
robot = create.Create(3) 
robot.toFullMode()

robot.setSong(0,[(36,16),(36,16),(38,32),(36,32),(53,32),(52,32),\
(36,16),(36,16),(38,32),(36,32),(55,32),(41,32),\
(36,16),(36,16),(48,32),(33,32)]) 

robot.setSong(1,[(53,32),(40,32),(38,32),(34,16),(34,16),\
(33,32),(41,32),(43,32),(41,32)])  

robot.playSongNumber(0)
robot.playSongNumber(1) 

第一首歌播放,但第二首歌赢了......为什么会有任何想法? 这是使用create.py Python接口编码到iRobot Create:

2 个答案:

答案 0 :(得分:1)

playSongNumber检查当前是否正在播放歌曲,并且在完成第一首歌曲播放之前,它将忽略新歌曲。您可以通过查询song-playing?传感器(编号37)来检查歌曲是否完成。

Create open interface document位于:

http://www.irobot.com/filelibrary/pdfs/hrd/create/create%20open%20interface_v2.pdf

从该文件:

  

播放歌曲

     

此命令可让您选择一个   使用歌曲添加到iRobot创建的歌曲播放的歌曲   命令。您必须使用乐曲将一首或多首歌曲添加到“创建”   命令以使Play命令起作用。此外,这个命令也可以   如果一首歌已在播放,则无效。等到当前正在播放   歌曲在发送此命令之前完成。请注意“歌曲播放”   传感器数据包可用于检查Create是否已准备好接受   这个命令。

     

歌曲播放

     

数据包ID:37数据字节:1个无符号

     

OI的状态   歌曲播放器被退回。 1 =正在播放的OI歌曲; 0 = OI歌曲   不玩了。

答案 1 :(得分:0)

没有看到任何文档或源代码,这是一个疯狂的猜测,但是......

我打赌playSongNumber函数只是向机器人发送播放命令,而不是等待它完成,当你发送一个播放命令时,它已经播放了一些东西,它无视你。

如果我是对的,那么希望API提供一些等待它完成的方法。如果它没有提供,但它确实提供了一种轮询当前状态的方法,你可以在一个循环中做到这一点(在每次检查之间暂时休息),直到它完成。如果它甚至没有提供,那么你必须通过计算音符的数量来计算歌曲需要多长时间(或者添加持续时间,如果每个对中的一个数字是持续时间)和睡了那么久。