Robocup3d比赛环境的搭建及常用函数简介

一.环境的搭建

1.查看本机wsl子系统的版本号
wsl -l -v
在这里插入图片描述

2.导入命令
首先进入想要导入的目录,如图我在E盘中创建了wslstorage目录,将压缩包移到此目录下,打开cmd输入以下代码
wsl --import ubuntu ./wsl ./Ubuntu.tar
在这里插入图片描述

3.注销wsl子系统
wsl --unregister Ubuntu

成功导入以后,我们就基本完成了比赛环境的搭建,这之后我们还需要一个roboviz,可以让我们用肉眼观察到仿真足球赛中发生的状况,详细的下载地址可以看这篇博客,上面写的很详细https://blog.flyme.tech/2020/11/29/robocup3d_wsl/

一切完成后,大功告成!

下面我给大家演示以下如何进入我们的比赛环境,在cmd中输入wsl命令进入wsl子系统,进入后,输入rcsoccersim3d命令,如下所示
在这里插入图片描述

接着打开roboviz,可以看到球场如下所示。
在这里插入图片描述

二.常用函数简介

WorldModel类

WorldModel类保存了场上许多的信息,是机器人利用场上信息的重要途径,它在机器人NaoBehavior中实例化了一个对象指针WorldModel。

在机器人策略中使用时,应使用worldmodel->方法名([参数列表])的形式。

// 返回当前机器人的编号
inline int getUNum() const {
  return uNum;
}

常用于判断自己是几号,可以在策略中设定类似“如果是几号球员,就执行什么动作”

例如在初始化beam函数中,根据unum来分配球员位置

// 如果是一号球员则它的位置是
if (worldModel -> getUNum() == 1)
{
  beamX = -15;
  beamY = 0;
  beamAngel = 0;
}
else if ... (其他情况)
// 返回比赛当前时间(距离开始的秒数)(返回的是一个浮点数)
inline double getGameTime() const {
  return gametime;
}
// 返回当前比赛的周期数(每一秒是20个周期,一个周期agent和server进行通讯,server进行仿真处理后将场上的信息返回发送给agent)
inline unsigned long getCycle() const {
  return cycle;
}
// 获取编号为i的对象的位置(以下两函数仅名称不同,效果是一样的)
inline VecPosition getOpponent(const int &i) const {
	return worldObjects[i].pos;
}
inline VecPosition getTeammate(const int &i) const {
	return worldObjects[i].pos;
}

如何利用这个函数来检索指定的球员的位置呢?

在头文件WorldObject.h中,定义了一个枚举worldObjType内容如下

enum WorldObjType {   // Types of objects
    WO_BALL,

    // Self and Teammates
    WO_TEAMMATE1,
    WO_TEAMMATE2,
    WO_TEAMMATE3,
    WO_TEAMMATE4,
    WO_TEAMMATE5,
    WO_TEAMMATE6,
    WO_TEAMMATE7,
    WO_TEAMMATE8,
    WO_TEAMMATE9,
    WO_TEAMMATE10,
    WO_TEAMMATE11,

    // Opponents
    WO_OPPONENT1,
    WO_OPPONENT2,
    WO_OPPONENT3,
    WO_OPPONENT4,
    WO_OPPONENT5,
    WO_OPPONENT6,
    WO_OPPONENT7,
    WO_OPPONENT8,
    WO_OPPONENT9,
    WO_OPPONENT10,
    WO_OPPONENT11,
  	
  
  	// 后面还有很多比如关节什么的枚举量
};

众所周知枚举类其实就是给整数起了个别名,例如此处第一个枚举WO_BALL

在代码中和0作用一样,此后的每一个枚举在前一个的基础上加1,所以检索球员的代码可以这样写:

for (int i = WO_OPPONENT; i<WO_OPPONENT + OPPONENT_NUM; i++){
  VecPosition pos = worldModel->getOpponent(i);
  // ...
}
// 获取编号为index的WorldObject的指针
inline WorldObject* getWorldObject(int index){
  return &worldObjects[index];
}

上文的getOpponent与此函数内容类似,都是在worldObjects数组中获取对应下标的对象

WorldObjects类描述了某物体(球,球员等)的一些基本属性,可以说,是WorldObject们构成了WorldModel。

关于WorldObjects类此处不展开介绍,其方法与属性都浅显易懂,有兴趣自行学习。

// 以下还有一些常用函数

// 获取此球员的位置
inline VecPosition getMyPosition() const {
  return myPosition;
};

// 获取球的位置
inline VecPosition getBall() const {
  return worldObjects[WO_BALL].pos;
};

// 获取当前比赛模式(比赛进行到不同阶段会有不同模式,比如任意球,门球...有兴趣可以查看源码自行观看)
inline VecPosition getPlayMode() const {
  return playMode;
}

// 获取机器人是否摔跤
inline bool isFallen() const {
  return fFallen;
}

Naobehaviors类

Naobehaviors类中有许许多多机器人可以执行的高级动作,怎么使用只要关注他的返回值即可,返回值为SkillType的可以直接在selectskill()中return(或者在其他返回值为SkillType的函数中return,比如gototarget()调用了gototargetrelative(),gototargetrelative调用了getwalk()等),返回值为VecPosition的可以用表达式和判断条件中,Bool类型的判断情况的函数,多用于条件判断。下面是一些常用的:

void NaoBehavior::beam( double& beamX, double& beamY, double& beamAngle );

决定球员上场位置的函数,可以依次对不同的number给其beamX和beamY赋值,也可以都设为default

double trim(const double& value,const double& min, const double& max);

trim:修剪。返回值为经过判断修改的value,满足大于min,小于max

---------------------------分割线(持续更新中)----------------------------

  • 8
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
·1.内容简介: --------------------------------------------------------------- 这是一个压缩包,里面是5个文件是东南大学Robocup3D仿真比赛的源代码。对于参加Robocup比赛绝对有帮助。学习别人如何组织代码,这样可以在一个更高的起点进行编程。 建议,对Robocup机器人比赛感兴趣或者东南大学以及其他高校的参赛同学下载学习。否则,会感觉我的文件都不知道什么东西。 --------------------------------------------------------------- ·2.资源使用方法 suse Linux 环境下编译运行,注意,必须安装好开发环境和仿真环境。 --------------------------------------------------------------- ·3.文件组成形式 格式:tar.gz 源代码,在src文件夹里 --------------------------------------------------------------- ·4. wogeguaiguai的附言: 1.我的其他数学建模精华资源也欢迎您下载,大学生基本上都听过这个比赛吧,这个比赛比较有意思,而且获奖比例高。我的资料都是非常好的准备比赛要用的资料。我比赛结束之后,这些资料就不用啦,分享给大家!俺一年的搜索资源,同学们一朝即可获得! 2.下载本文件后,您可以获得所有信息,不必再零散下载,给您带来很大的方便。 3.10个资源分,绝对物超所值。评论后,您就可以获得11个资源分,欢迎您评论! --------------------------------------------------------------- ·5.如有问题,请在此留言,谢谢。 --------------------------------------------------------------- ·6.上传时间 2010-2-24-night
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BillySturate

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值