Robocup3D第一次笔记 您所在的位置:网站首页 中学教室尺寸规范标准 Robocup3D第一次笔记

Robocup3D第一次笔记

#Robocup3D第一次笔记| 来源: 网络整理| 查看: 265

初学robocup3D,还不太了解。

首先我们安装好robocup3D的环境,先测试一下demo

1:在roboviz文件夹里打开终端,输入 ./roboviz.sh 打开仿真模拟器

2:在SIMSPARK_0.3.1_RELEASE文件夹打开终端,输入rcsss后tap键补全,打开足球场。

3:在代码文件夹打开终端,./ 编译运行代码

我的demo就是机器人转圈;

SkillType NaoBehavior::demoKickingCircle() { // Parameters for circle VecPosition center = VecPosition(-HALF_FIELD_X/2.0, 0, 0); double circleRadius = 5.0; double rotateRate = 2.5; // Find closest player to ball int playerClosestToBall = -1; double closestDistanceToBall = 10000; for(int i = WO_TEAMMATE1; i < WO_TEAMMATE1+NUM_AGENTS; ++i) { VecPosition temp; int playerNum = i - WO_TEAMMATE1 + 1; if (worldModel->getUNum() == playerNum) { // This is us temp = worldModel->getMyPosition(); } else { WorldObject* teammate = worldModel->getWorldObject( i ); if (teammate->validPosition) { temp = teammate->pos; } else { continue; } } temp.setZ(0); double distanceToBall = temp.getDistanceTo(ball); if (distanceToBall < closestDistanceToBall) { playerClosestToBall = playerNum; closestDistanceToBall = distanceToBall; } } if (playerClosestToBall == worldModel->getUNum()) { // Have closest player kick the ball toward the center return kickBall(KICK_FORWARD, center); } else { // Move to circle position around center and face the center VecPosition localCenter = worldModel->g2l(center); SIM::AngDeg localCenterAngle = atan2Deg(localCenter.getY(), localCenter.getX()); // Our desired target position on the circle // Compute target based on uniform number, rotate rate, and time VecPosition target = center + VecPosition(circleRadius,0,0).rotateAboutZ(360.0/(NUM_AGENTS-1)*(worldModel->getUNum()-(worldModel->getUNum() > playerClosestToBall ? 1 : 0)) + worldModel->getTime()*rotateRate); // Adjust target to not be too close to teammates or the ball target = collisionAvoidance(true /*teammate*/, false/*opponent*/, true/*ball*/, 1/*proximity thresh*/, .5/*collision thresh*/, target, true/*keepDistance*/); if (me.getDistanceTo(target) < .25 && abs(localCenterAngle) g2l(target), localCenterAngle); } else { // Move toward target location return goToTarget(target); } } }

然后就可以尝试着理解代码了

我首先看了worldmodel模块

class WorldModel { private: unsigned long cycle; int scoreLeft; int scoreRight; double time; double gameTime; int playMode; int lastPlayMode; int lastDifferentPlayMode; int uNum; int side; bool uNumSet; bool sideSet; WorldObject worldObjects[NUM_WORLD_OBJS]; VecPosition myPosition; SIM::AngDeg myAngDegrees; bool confident; VecPosition myLastPosition; SIM::AngDeg myLastAngDegrees; RVSender *rvsend; bool fUseGroundTruthDataForLocalization; // TODO: comment it out if we don't want ground truth #define GROUND_TRUTH_SERVER #ifdef GROUND_TRUTH_SERVER VecPosition myPositionGroundTruth; SIM::AngDeg myAngGroundTruth; VecPosition ballGroundTruth; #endif double lastBallSightingTime; double lastLineSightingTime; // This is where we actually saw the ball ourself vector lastBallSeenPosition; vector lastBallSeenTime; // remember last two skills vector lastSkills; vector executedSkillsForOdometry; // record last odometry from particle filter SIM::Point2D lastOdometryPos; double lastOdometryAngDeg; bool fLocalized; bool fFallen; HCTMatrix localToGlobal, globalToLocal; vector fallenTeammate; vector fallenOpponent;

模块太长了所以没给完全

我们可以看到很多定义,重载来实现函数功能。

其中部分函数通过教程与摸索知道了其功能

getMyPosition(获取球员的位置) getUNum() (判断球员的号码) getPlayMode()(获取比赛模式) getTime()(比赛时间) setPlayMode()(设置比赛模式) setUNum()(设置球员) VecPosition(x,y,z)(初始化位置) getOpponent()(获取敌方守门员的位置) 等等还有很多

比较懒就写了一个很简单的例子(11号就直接冲)

SkillType NaoBehavior::demokick(){ if(worldModel->getUNum()==11){ return kickBall(KICK_11M,VecPosition(HALF_FIELD_X,0,0)); } else return SKILL_STAND; }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有