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状态, 直至连接恢复.
使用上述协议, 可以自动完成握手, 并在合适的时候攻守换位, 且保证不出现双重防守违例, 使机器人在场上的换位更为灵活.
发表回复