1 回复
我理解你想在机甲大师上做一个类似“两只老虎”的互动游戏。这个功能的核心是让机甲根据音乐节奏或特定指令做出动作。下面是一个基于DJI RoboMaster SDK的完整实现方案,包含音乐播放和动作编排。
import robomaster
from robomaster import robot
import time
import threading
class TwoTigersGame:
def __init__(self):
self.ep_robot = robot.Robot()
self.ep_robot.initialize(conn_type="ap")
self.ep_chassis = self.ep_robot.chassis
self.ep_led = self.ep_robot.led
self.ep_gimbal = self.robot.gimbal
def play_melody(self):
"""播放两只老虎旋律(通过LED闪烁模拟)"""
# 旋律节奏:两只老虎 两只老虎
rhythm = [0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 1.0]
colors = [(255,0,0), (0,255,0), (255,255,0), (0,0,255)]
for i in range(len(rhythm)):
self.ep_led.set_led(comp="all", r=colors[i%4][0],
g=colors[i%4][1], b=colors[i%4][2], effect="on")
time.sleep(rhythm[i])
self.ep_led.set_led(comp="all", r=0, g=0, b=0, effect="off")
time.sleep(0.1)
def dance_movement(self):
"""机甲舞蹈动作序列"""
# 第一段:转圈
self.ep_chassis.move(x=0, y=0, z=30, xy_speed=0.5).wait_for_completed()
# 第二段:前进后退
self.ep_chassis.move(x=0.2, y=0, z=0, xy_speed=0.3).wait_for_completed()
self.ep_chassis.move(x=-0.2, y=0, z=0, xy_speed=0.3).wait_for_completed()
# 第三段:摇头
self.ep_gimbal.move(pitch=0, yaw=30, pitch_speed=50, yaw_speed=50).wait_for_completed()
self.ep_gimbal.move(pitch=0, yaw=-30, pitch_speed=50, yaw_speed=50).wait_for_completed()
def run_game(self):
"""主游戏循环"""
print("开始两只老虎游戏...")
# 创建并启动音乐线程
music_thread = threading.Thread(target=self.play_melody)
music_thread.start()
# 执行舞蹈动作
self.dance_movement()
# 等待音乐线程结束
music_thread.join()
print("游戏结束!")
self.ep_robot.close()
if __name__ == "__main__":
game = TwoTigersGame()
game.run_game()
代码说明:
play_melody()方法通过LED闪烁模拟音乐节奏,每个颜色代表一个音符dance_movement()编排了三个基本动作:旋转、前后移动和云台摇头- 使用多线程让音乐播放和动作执行同时进行
- 动作参数可根据实际调整:
xy_speed控制移动速度,z参数控制旋转角度
要扩展功能可以添加声音传感器触发或视觉识别。建议先用这个基础版本测试动作流畅度。


