RCJ2012 攻守互换通信协议

Update:这套协议由于过于不稳定、容易发生状态震荡而被放弃。新的通信方案见此:稳定版

主程序分如下状态:

  • 挂起/握手 Halt
  • 防守 Defense
  • 进攻 Attach
  • 请求 Request
  • 紧急/出错 Emergency

每部机器将不间断的发送本机当前状态, 并根据接收到的队友状态进行相应的判断.

状态之间的转换如下:

H:{

进入时, 记录时间戳

  • 收到H: 忽略
  • 收到D: 进入A
  • 收到R/A/E: 进入D
  • 自进入时间戳超过random(5~7)秒, 进入D
  • 若收到手动按键命令(选择), 进入A或D

此状态下执行move(0,0), 即停机待命

}

D:{

  • 收到A/R/E/H: 忽略
  • 收到D: 进入H
  • 若收到手动按键命令(应急), 进入E
  • 进入控球状态: 进入R

此状态下执行def_dete(), 执行防守动作

}

A:{

  • 收到D/H: 忽略
  • 收到R: 判断, 同意攻守互换则进入D, 否则不变
  • 收到E: 进入E
  • 收到A: 进入H若收到手动按键命令(应急), 进入E

此状态下执行atk_dete(), 执行进攻动作

}

R:{

  • 收到A/H: 忽略
  • 收到D: 进入A
  • 收到R: 进入D
  • 收到E: 进入D
  • 若收到手动按键命令(应急), 进入E

此状态下执行def_dete(), 执行防守动作

}

E: {

  • 发送E
  • 若收到手动按键命令(解除), 进入A

此状态下执行def_dete(), 执行防守动作

}

蓝牙失去连接后:

A/D保持当前状态, R/H/E跳入D状态, 直至连接恢复.

 

 

使用上述协议, 可以自动完成握手, 并在合适的时候攻守换位, 且保证不出现双重防守违例, 使机器人在场上的换位更为灵活.

 


发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Powered by WordPress. Design: Supermodne.