《机器人技术》第一次作业
题目: 在机器人足球比赛中,server 和球员 client 之间通过发送字符串来进行信息交互,其
中 server 要把某球员的听觉和视觉信息发送给该球员,信息的格式如下所示:
(hear Time Sender Message)
(see Time ObjInfo ObjInfo …)
其中
(hear Time Sender Message)的具体含义如下:
➢ Time:前的仿真周期。
➢ Sender
➢ 如果是其他球员发送的消息,那么是发送者的相当方向(Direction)
➢ self:发送者是自己本人。
➢ referee:裁判是发送者。
➢ online_coach_left 或者 online_coach_ringt:发送者是在线教练。
➢ Message:消息内容。
(see Time ObjInfo ObjInfo …)的具体含义如下:
➢ Time:当前时间。
➢ ObjInfo 表示了可视对象的信息。其格式为:
(ObjName Direction Distance DirChng DistChng BodyDir HeadDir)
 ObjName = (player Teamname Unum)
➢ |(goal Side)
➢ |(ball)
➢ |(flag c)
➢ |(flag [ l | c | r] [ t | b ])
➢ |(flag p [ l | r] [ t | c | b ])
➢ |(flag [ t | b] [ l | r ] [10 | 20 | 30 | 40 |50 ])
➢ |(flag [ l | r] [ t | b ] [10 | 20 | 30 ])
➢ |(flag [ l | r | t | b ] 0)
➢ |(line [ l | r | t | b ])
 Direction,Distance 表示目标的相对距离和相对方向
 DirChng 和 DistChng 分别表示目标距离和方向的相对变化,如果是固
定物体(球和球员以外的所有对象)则没有改项值
BodyDirHeadDir,分别是被观察球员相对观察者的身体和头部的
相对角度,只有是球队对象才有这一项值。
要求:编写程序解析球员所看到和听到的信息。
示例:(hear 1022 -30 passto(23,24))(see 1022 ((ball) -20 20 1 -2) ((player hfut1 2) 45 23 0.5 1 22
40 ) ((goal r) 12 20) ((Line r) -30))
输出:
在 1022 周期 hear 从 -30 方向 听到了 passto(23,24);
在 1022 周期 see Ball 距离我的 Direction 是 -20, Distance 是 20,DistChng 是 1,DirChng
是-2;player hfut 2 距离我的 Direction 是 45, Distance 是 23,DistChng 是 0.5,DirChng 是
1,它的 BodyDir 是 22 和 HeadDir 是 44goal r 距离我的 Direction 是 12,Distance 是 20。Line r 和我的角度是-30 度
一些参考建议:
场上对象: (f r b 10)表示场上某个点,具体见教材 28 页,教材上写的是(flag r b 10),
大家写程序的时候以 f 为准。
本示例中左右 2 边的名称分别为 hfut1 和 hfut2, 大家写程序的时候 hfut1 的球员信
息存储在在队友里面,hfut2 存储在对手里面。
这是我自己使用python程序编写的源代码。关键地方我都给了注释。应该不会看不懂,也就不需要我过多讲解了。
希望大家在借鉴的同时能有自己的思考,做到学以致用。祝大家都能在作业中取得好成绩。
import re # 导入正则表达式模块
# 更改这个元组内容的顺序即可给改变数据对应的顺序,不用改变封装好的函数
Position = ('Direction', 'Distance', 'DirChng', 'DistChng', 'BodyDir', 'HeadDir')   # 使用tuple元组不可修改其内容def outPutInfo(info):"""格式化输出解析出来的数据包:param info: 解析出来的信息包:return: 无"""hear = info['hear'] # 获取听到的数据包see = info['see']   # 获取看到的数据包if hear != '':print("在 {} 周期 hear 从 {} 方向 听到了 {};".format(hear['time'], hear['Sender'], hear['Message']))passif see != '':print('在 {} 周期 see'.format(see['time']), end=' ')see = see['obj_list']       # 去掉第一个时间for item in see:for key, value in item.items(): # 获取信息if 'ObjName'.__eq__(key):print(item[key], end=' ')elif 'Direction'.__eq__(key):print("距离我的 Direction 是 {},".format(item[key]), end=' ')elif 'Distance'.__eq__(key):print("Distance 是 {},".format(item[key]), end=' ')elif 'DirChng'.__eq__(key):print("DirChng 是 {},".format(item[key]), end=' ')elif 'DistChng'.__eq__(key):print("DistChng 是 {},".format(item[key]), end=' ')elif 'BodyDir'.__eq__(key):print("它的 BodyDir 是 {}".format(item[key]), end=' ')elif 'HeadDir'.__eq__(key):print("和 HeadDir 是 {}".format(item[key]), end=';')passprint()         # 添加一个换行,使得输出更直观passpassdef decode(msg):"""对消息进行解析:param msg: 要解析的字符串:return: 解析完的数据包"""package = packMsg(msg)  # 首先将整个消息分块打包,分出大的数据包worked_msg = {'hear': '', 'see': ''}if not package:         # 如果分离出的数据包是空的,说明传入的字符串没有数据print('未检测到数据包!')else:for item in package:        # 循环最外层的大数据包msg_type = re.findall('[(](.*?) ',item)[0]  # 拿到数据包的类型if 'see'.__eq__(msg_type):  # 如果数据包是see类型see = {'type': 'see', 'time': re.findall(r'\d+', item)[0]}obj_info = packMsg(item, 1)  # 跳过第一个左括号# print(obj_info)obj_list = []   # 创建一个对象列表,用于存储对象for obj in obj_info:    # 循环所有对象信息tmp = dict()tmp['ObjName'] = re.findall('[(]{2}(.*?)[)]', obj)[0]   # 拿到名字信息# print(tmp)position_info = re.findall('[)](.*?)[)]',obj)[0]    # 拿到位置信息position_info = position_info.split(' ')        # 将位置信息分割出来# print(position_info)i = 0for pos in position_info:  # 循环每个对象的位置信息if pos != '':tmp[Position[i]] = pos# print(pos)i += 1passpassobj_list.append(tmp)    # 将对象加入到对象列表中passsee['obj_list'] = obj_list# print(see)worked_msg['see'] = seepass  # 处理完看到的信息elif 'hear'.__eq__(msg_type):item = item[1:len(item)-1]   # 去掉最外面的左右括号hear = {'type': 'hear', 'time': item.split(' ')[1], 'Sender': item.split(' ')[2], 'Message': item.split(' ')[3]}worked_msg['hear'] = hearpass    # 处理完听到的信息pass    # 最外层循环的大数据包,pass  # 数据处理完成return worked_msgdef packMsg(msg,start=0):"""匹配一对括号里面所有内容惊醒打包:param msg:    要打包的信息:param start:  检查的起始位置,默认是0从头来开始:return: 打包完成的信息包组成的列表,若没有消息包就返回空列表"""num = 0index = 0tmp = []msg = msg[start:]for s in msg:if s == '(':num += 1if num == 1:start = indexelif s == ')':num -= 1if num == 0:tmp.append(msg[start:index+1])start = index+1index += 1return tmpif __name__ == '__main__':msg = input("请输入你需要解析的字符串信息:")# msg = '(hear 1022 -30 passto(23,24))(see 1022 ((ball) -20 20 1 -2) ((player hfut1 2) 45 23 0.5 1 22 40 ) ((goal r) 12 20) ((Line r) -30))'# msg = '(see 2022  ((player hfut2 8) 40 23 1  6 21  33 ) ((goal r) 15 30)  ((f r t 20)5   24 ))(hear 2022 -10 “passball”)'# msg = '(hear 2022 -10 “passball”)'print('\033[1;31m程序是按照作业PPT参数的顺序进行解包和输出的!\033[0m')worked_info = decode(msg)       # 对接受的数据进行解析outPutInfo(worked_info)         # 格式化输出# print(worked_info)            # 可以查看解析后的数据包"""
样例输入:
(hear 1022 -30 passto(23,24))(see 1022 ((ball) -20 20 1 -2) ((player hfut1 2) 45 23 0.5 1 22 40 ) ((goal r) 12 20) ((Line r) -30))
样例输出:
在 1022 周期 hear 从 -30 方向 听到了 passto(23,24);
在 1022 周期 see   ball 距离我的 Distance 是 -20, Direction 是 20, DirChng 是 1, DistChng 是 -2,
player hfut1 2 距离我的 Distance 是 45, Direction 是 23, DirChng 是 0.5, DistChng 是 1, 它的 BodyDir 是 22 和 HeadDir 是 40;
goal r 距离我的 Distance 是 12, Direction 是 20,
Line r 距离我的 Distance 是 -30,
"""

合肥工业大学机器人足球仿真robcup作业一(python实现)附代码有注释相关推荐

  1. 合肥工业大学机器人足球仿真robcup作业二(python实现)附代码有注释

    用面向对象的思维设计相关类,从而实现直线与直线.直线与圆.直线与矩形的交点. 要求各给出每个案例的至少一个示例的程序. 这是第二次机器人足球的作业代码,写的比较潦草,但是用的方法还是通俗易懂的,基本都 ...

  2. 合肥工业大学机器人足球仿真robcup作业三(python实现)附代码有注释

    第三次作业 题目:已知2个点的信息,定位自己的绝对坐标. 设图中C(0,0),P1(-52.5,-32), P2(-52.5, 32), P3(52.5,32), P4(52.5,-32), P5(0 ...

  3. 机器人足球仿真第一次作业

    机器人足球仿真第一次作业 机器人足球仿真是一门与RoboCup有关的一门课程,讲到了有关球员的决策,球队的开发等知识. 这是老师布置的第一次作业,基本任务就是解析字符串,其功能相当于uva中Prase ...

  4. 合肥工业大学机器人技术作业一

    合肥工业大学机器人技术作业一 题目: 在机器人足球比赛中,server和球员client之间通过发送字符串来进行信息交互,其中server要把某球员的听觉和视觉信息发送给该球员,信息的格式如下所示: ...

  5. 机器人足球仿真中的三角进攻算法研究

    摘 要:机器人足球仿真系统提供了实时对抗环境下研究多智能体协作问题的一个良好平台.本文基于仿真环境下的理论基础及模型,通过逐场次逐帧地测试与分析研究,设计出用于控制机器人协作队形的三角进攻算法,并对基 ...

  6. 合肥工业大学机器人技术五十六题

    合肥工业大学机器人技术五十六题 题目要求 //拿球后行为,利用已有 Worldmodel(21) (1)在 playOn 模式下,拿到球以后朝前方快速带球. (2)在 PlayOn 模式下,拿到球以后 ...

  7. python五子棋游戏大作业_python-大作业之五子棋游戏(附代码)

    <python-大作业之五子棋游戏(附代码)>由会员分享,可在线阅读,更多相关<python-大作业之五子棋游戏(附代码)(6页珍藏版)>请在金锄头文库上搜索. 1.Pytho ...

  8. 合肥工业大学机器人技术期末_合肥工业大学 机器人技术 作业和实验

    简介 你好! 在这篇文章中,我将免费共享合肥工业大学<机器人技术>作业和实验环节的代码和个人报告,以供交流学习.为了方便更多的同学搜索到这篇博客,我会在下面贴出一部分实验题目. 共享资源包 ...

  9. 合工大php期末试卷_完美起航-合肥工业大学机器人技术作业和实验

    简介 你好! 在这篇文章中,我将免费共享合肥工业大学<机器人技术>作业和实验环节的代码和个人报告,以供交流学习.为了方便更多的同学搜索到这篇博客,我会在下面贴出一部分实验题目. 共享资源包 ...

  10. 合肥工业大学机器人技术期末_机器人技术第三次作业(HFUT)

    第三次作业 本人代码水平十分有限,仅供参考,有错误请指出 java源码: package robathomework3; import java.lang.Math; //点类 class point ...

最新文章

  1. mysql启动错误1067进程意外终止的解决方法
  2. ESP8266 问题
  3. Spring Boot——读取.properties配置文件解决方案
  4. excel 如何用vba将某一条记录移动到另一张工作表中_EXCEL常用快捷键
  5. 分享memcache和memcached安装过程(转)
  6. c++ 宏 win linux_服务器端开发经验总结 Linux C语言
  7. AlexNet原理和实现
  8. 静态 动态 强类型 弱类型语言的区别
  9. 图片相似度——hash算法简介
  10. python3 ftplib_python3从零学习-5.10.9、ftplib—FTP 协议客户端
  11. 使用IDEA创建Maven项目教程
  12. VS2008整合sp1
  13. Landsat8—ANG.txt文件
  14. 如果更快的访问ESS系统?
  15. git push 报错 pre-receive hook declined
  16. 相对路径目录返回问题
  17. 我用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
  18. AutoCAD哪个版本好
  19. 如何学会自主学习?(精品)
  20. linux 文件转换ascii,关于linux:如何将文件从ASCII转换为UTF-8?

热门文章

  1. 解析torch.norm函数
  2. 映泰主板G31安装centos系统启动不了解决办法
  3. 对称函数、半正定矩阵(核函数涉及)
  4. Origin画甘特图-II
  5. Rainyday.js – 傻眼了!竟然有如此逼真的雨滴效果
  6. 华为OSPF配置模拟实例
  7. 应用服务器配置测算及计算公式
  8. FS2116C输入3.7V输出12V2.2A高效升压IC芯片
  9. 常见的web前端面试试题(含答案)
  10. C# SQLHelper类