iRobot Create - 播放两首歌曲

问题描述 投票:0回答:2

这是我的代码:

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) 

第一首歌曲可以播放,但第二首却不能……有什么原因吗? 这是使用 iRobot Create 的

create.py
Python 接口进行编码的:

python robotics
2个回答
1
投票

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

创建开放接口文档位于此处:

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

摘自该文件:

播放歌曲

此命令可让您选择一个 使用歌曲从添加到 iRobot Create 的歌曲中播放歌曲 命令。您必须使用歌曲添加一首或多首歌曲才能创建 命令以便播放命令起作用。此外,该命令还执行 如果歌曲已经在播放,则不起作用。等到当前正在播放的 在发送此命令之前歌曲已完成。注意“播放歌曲” 传感器数据包可用于检查Create是否准备好接受 这个命令。

歌曲播放

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

OI的状况 歌曲播放器已返回。 1 = 当前正在播放的 OI 歌曲; 0 = OI 歌曲 不玩了。


0
投票

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

我敢打赌,

playSongNumber
函数只是向机器人发送播放命令,而不等待它完成,当你在它已经在播放某些内容时向它发送播放命令时,它会忽略你。

如果我是对的,那么希望 API 提供某种方法来等待它完成。如果它没有提供这一点,但它确实提供了一种轮询当前状态的方法,您可以在循环中执行此操作(在每次检查之间短暂休眠),直到完成。如果它甚至没有提供这一点,那么您必须通过计算音符数量(或添加持续时间,如果每一对中的数字之一是持续时间)来计算出这首歌需要多长时间,然后睡觉长。

© www.soinside.com 2019 - 2024. All rights reserved.