声明:以下内容是在Ubuntu18.04版本下搭建的比赛环境下的学习笔记。

这里写目录标题

  • 比赛介绍
    • 在Ubuntu18.04下打开robocup球场(开机)
      • 虚拟环境球场
  • 小贴士:
    • audio.cc源文件中关于球场代码注释
    • worldmodel.h中部分函数功能翻译(持续更新ing)
    • 尝试理解worldmodel.h头文件public83行到163行的中文注释

比赛介绍

RoboCup 仿真比赛是一个能为多智能体系统和模拟智能进行研究、教育的工具。比赛是在一个标准的计算机环境中进行的,提供了一个完全分布式控制、实时异步多智能体环境。通过这个平台,可以测试各种理论、算法和Agent体系结构。在实时异步、有噪声的对抗环境中,研究多智能体的合作对抗问题。当然,仿真组的比赛使用的机器人并非是真的机器人。一个机器人是一个Agent, 它拥有自己的大脑,是一个独立的“主体”。而一个球队实际是由十一个程序组成的。服务器的工作就是计算并更新球场上所有物体的位置、运动和状态,发送视觉和听觉信息给球员,接收和执行球员的命令。
RoboCup仿真组是完全基于软件程序的开发而没有实际的机器人,这是不同与 RoboCup 其他组的重要方面。因此,研究人员可以把精力完全投入到机器人的高层决策中,而无需考虑硬件问题。同时,仿真组比赛所需的仿真平台的开发还可以促进计算机仿真技术的发展。
RoboCup3D是2005年才引入的新的仿真组别。比赛的环境是3D的,球场上各个物理状态的更新是依赖于物理引擎的,所以更逼近现实。05、06年的比赛都是球形环境的,每个Agent都是一个球体,机器人踢球其实就是球撞球的过程。自07年开始,每个球员都是一个仿人的机器人,它们有实实在在的实物机器人模型。这时的比赛就是仿人机器人之间的对抗。由于球员是仿人的,踢球也自然是用脚去踢,这时动作的实现成了一大难题。这是仿真2D组和之前的球形环境的仿真3D所不需要考虑的问题。不过这必然会促进机器人相关理论的研究和发展。

在Ubuntu18.04下打开robocup球场(开机)

1.在下载解包好的RoboViz/bin文件内开启终端输入./roboviz.sh开启赛场
2.在下载解包好的SIMSPARK_0.3.1_RELEASE/simspark-SIMSPARK_0.3.1_RELEASE文件夹内开启终端输入rcssserver3d
3.在下载解包好的源码文件master/utaustinvilla3d-master内开启终端输入./start.sh
4.在3处再次输入./kill.sh可以将机器人下场,注意:若机器人位置不合法右上角会报illegal defendence(在audio文件中将解释)
5.回到球场界面按下O可以选择开球

6.开始比赛的一些命令
gametime 比赛时间
playmode 当前比赛模式
beforekickoff 比赛未开始状态
killoff_left 左边开球
beam 球员上场的位置

虚拟环境球场


比赛的球场是一个30*20的绿茵场,以中心为坐标原点。满足x∈[-15,15],y∈[-10,10]

小贴士:

.h为头文件
.cc为源文件

audio.cc源文件中关于球场代码注释

//#define HALF_FIELD_X 15.0    field:田(球场)
//#define HALF_FIELD_Y 10.0
//#define NUM_AGENTS 11        agent:代理(机器人代理人)以下简称为球员
/*These are x and y limits for the ball and the players.这些是球和球员的x和y限制
*/
double minBallX = -HALF_FIELD_X - 2.0;//球的x坐标的最小值
double maxBallX = HALF_FIELD_X + 2.0;//球的x坐标的最大值
double minBallY = -HALF_FIELD_Y - 2.0;//球的y坐标的最小值
double maxBallY = HALF_FIELD_Y + 2.0;//球的y坐标的最大值
double minAgentX = -HALF_FIELD_X - 5.0;//球员的x坐标的最小值
double maxAgentX = HALF_FIELD_X + 5.0;//球员的x坐标的最大值
double minAgentY = -HALF_FIELD_Y - 5.0;//球员的y坐标的最小值
double maxAgentY = HALF_FIELD_Y + 5.0;//球员的y坐标的最大值

worldmodel.h中部分函数功能翻译(持续更新ing)

设置及坐标参数返回           VecPosition(x,y,0)
判断球员于目标距离          temp.getDistanceTo(VecPosition(x,y,0))
获取当前对象的指定坐标      temp.getX() (之前必须在前重新定义对象)
获取当前球员坐标               getMyPosition()
获取比赛时间                getGameTime()
获取球的位置                getBall()
获取比赛状态                getPlayMode()
获得上一次策略              getLastSkill()
获取摔倒队友的编号          getFallenTeammate()
获得对方球员的位置          worldModel->getOpponent(i)
获取球员编号                worldModel->getUNum()
获取指定球员坐标            worldModel->getTeammate(i)  (i为我方球员编号)
指定当前球员行动方向        SkillType goToTargetRelative(相对球员方向,角度)
动作踢球                   SkillType kickBall(kickTypeToUse,Vecposition &target)
设置及坐标参数返回          VecPosition(x,y,0)

尝试理解worldmodel.h头文件public83行到163行的中文注释

public:WorldModel();//构造函数~WorldModel();//析构函数inline void setMyConfidence(bool confidence) {confident = confidence;}//?inline bool getMyConfidence() const {return confident;}//?inline WorldObject* getWorldObject( int index ) {return &worldObjects[index];}//?void updateGoalPostsAndFlags();//更新球和旗的位置void updateMatricesAndMovingObjs( VecPosition& fieldXPlusYPlus,VecPosition& fieldXPlusYMinus,VecPosition& fieldXMinusYPlus,VecPosition& fieldXMinusYMinus );//更新矩阵和移动对象inline void setMyPosition( const VecPosition& newPos ) {myPosition = newPos;}//更新自己的位置inline void setMyPosition( const SIM::Point2D& newPos ) {myPosition.setX( newPos.getX() );myPosition.setY( newPos.getY() );// Z is not changed, stays at the default//Z 不更改,保持默认值 高是z}inline VecPosition getMyPosition() const {return myPosition;}inline void setMyAngDeg( SIM::AngDeg newAng ) {myAngDegrees = newAng;}//更新角度inline void setMyAngRad( SIM::AngRad newAng ) {myAngDegrees = Rad2Deg( newAng );}//更新弧度inline SIM::AngDeg getMyAngDeg() const {return myAngDegrees;}inline SIM::AngRad getMyAngRad() const {return Deg2Rad( myAngDegrees );}inline void setMyLastPosition( const VecPosition& newPos ) {myLastPosition = newPos;}//更新自己最新的位置inline VecPosition getMyLastPosition() const {return myLastPosition;}inline void setMyLastAngDeg( SIM::AngDeg newAng ) {myLastAngDegrees = newAng;}//更新最新的角度inline void setMyLastAngRad( SIM::AngRad newAng ) {myLastAngDegrees = Rad2Deg( newAng );}//更新最新的弧度inline SIM::AngDeg getMyLastAngDeg() const {return myLastAngDegrees;}inline SIM::AngRad getMyLastAngRad() const {return Deg2Rad( myLastAngDegrees );}inline RVSender *getRVSender() const {return rvsend;}inline void setUseGroundTruthDataForLocalization(bool fUseGroundTruthDataForLocalization) {this->fUseGroundTruthDataForLocalization = fUseGroundTruthDataForLocalization;}//更新球场地面实况本地化inline bool useGroundTruthDataForLocalization() {return fUseGroundTruthDataForLocalization;}//返回球场地面实况本地化数据

robocup学习篇(一)相关推荐

  1. 阿里云天池大赛赛题解析――深度学习篇

    作者:天池平台 出版社:电子工业出版社 品牌:电子工业出版社 出版时间:2021-09-01 阿里云天池大赛赛题解析――深度学习篇

  2. 拒绝从入门到放弃_《鸟哥的 Linux 私房菜 — 基础学习篇(第三版)》必读目录

    目录 目录 前言 关于这本书 必看知识点 最后 前言 相信部分刚进入这个行业的新同学会对一个问题感到疑惑,为什么从培训学校出来的学员不被欢迎? 这里记录下一些我个人的看法(博主也曾有面试新员工的经历) ...

  3. 机器学习 集成学习篇——python实现Bagging和AdaBOOST算法

    机器学习 集成学习篇--python实现Bagging和AdaBOOST算法 摘要 Bagging算法 Adaboost算法 摘要 本文通过python实现了集成学习中的Bagging和AdaBOOS ...

  4. .net ajax 怎么写,.NET学习篇--Ajax中Url的写法

    .NET学习篇--Ajax中Url的写法 什么是Ajax AJAX = Asynchronous JavaScript and XML(异步的 JavaScript 和 XML). AJAX 不是新的 ...

  5. python基础代码的含义_Python基础学习篇

    原标题:Python基础学习篇 1.编码 默认情况下,Python 3 源码文件以 UTF-8 编码,所有字符串都是unicode 字符串. 当然你也可以为源码文件指定不同的编码:# -*- codi ...

  6. Java NIO学习篇之直接缓冲区和非直接缓冲区

    定义 以上是书深入理解java虚拟机对直接内存的描述.直接缓冲区用的就是直接内存. java nio字节缓冲区要么是直接的,要么是非直接的.如果为直接字节缓冲区,则java虚拟机会尽最大努力直接在此缓 ...

  7. Java NIO学习篇之通道FileChannel详解

    定义: FileChannel是Java NIO对应于磁盘等存储设备文件操作的通道. 常用API详解: 获取FileChannel的API /** * 打开一个与文件的连接通道,用于进行文件操作. * ...

  8. Java NIO学习篇之缓冲区ByteBuffer详解

    定义: ByteBuffer是Buffer的实现类之一,是一个通用的缓冲区,功能要比其他缓冲区子类多.支持直接内存.是一个抽象类.子类实现是HeapByteBuffer(非直接缓冲区子类),Direc ...

  9. python-基础学习篇(一)

    python基础学习(一) 不积硅步,无以至千里.基础的学习越加透彻,才能更清楚的理解和分析需求,我贯彻基础学习"永无止境"的理念,故把自学的知识梳理在博客中,基础学习篇无限更新. ...

最新文章

  1. AP计算机科学有几门,2017新增AP计算机科学考试科目
  2. java -jar 和 -cp详解
  3. Android播放器自定义,android surfaceView+mediaPlayer 自定义视频播放器
  4. mysql pt-kill_percona-toolkit之pt-kill 杀掉mysql查询或连接的方法
  5. 云计算将使IT人失业?惠普推云计算裁员九千!程序员如何面对即将到来的产业大调整?...
  6. 200730学习日报6字符串
  7. envoy api 网关_在边缘,作为网关或在网格中构建控制平面以管理Envoy代理的指南...
  8. word中的图片设定成统一文字环绕格式
  9. [笔记]前端 - 下拉菜单的实现
  10. [topcoder]AvoidRoads
  11. CSS-样式表插入的三种方法、背景(background)、文本
  12. unix 与 linux 操作系统 介绍
  13. 离线数据系统之oozie详解
  14. scanf和getch函数的区别
  15. C语言学习-翁凯(第五章笔记)
  16. Vue 图片懒加载 v-lazy
  17. 高级软件工程第三次作业 赵坤黄亦薇
  18. 收藏商品表设计_数据采集实战:商品详情页数据埋点
  19. 保姆级-天翼网关TEWA-700G、TEWA-1000E/G等系列光猫获取超级密码
  20. 点集拓扑学的历史介绍

热门文章

  1. java计算机毕业设计固定资产管理系统源码+mysql数据库+系统+lw文档+部署
  2. 瑞萨RAe2studio快速上手视频笔记 一、瑞萨RAe2studio介绍
  3. mac tableau 安装mysql驱动
  4. bootstrap v3.3.6 版本.table-striped不起作用的问题
  5. 深入 javascript 之 原型和原型链!!!
  6. AI编译器XLA调研
  7. java锁的种类以及辨析(一):自旋锁
  8. mfc程序退出时删除托盘图标
  9. pg数据库数据量很小但是data目录很大的排查思路
  10. Go学习笔记_环境搭建