原文地址http://ahoj.cc/2019/04/Nao%E6%9C%BA%E5%99%A8%E4%BA%BA-Robocup%E5%9C%BA%E5%9C%B0%E4%BF%A1%E6%81%AF/
Robocup SPL 賽中的場地參數 和 BHuman 中的場地參數配置文件。
BHuman 場地配置文件:
BHumanCodeRelease-master/Config/Locations/Default/fieldDimensions.cfg
單位 mm。
Robocup SLP 場地參數
BHuman 場地配置文件
// This is the field configuration for the indoor SPL field 2016
// 2016年室內SPL場地的場地配置 y是場地的寬(左爲+),x是場地的長(己方爲+)
// xPos 對手場地邊界 ok
xPosOpponentFieldBorder = 5200; // origin -> far field boundary // 遠場邊界
// xPos 對手的目標 ok
xPosOpponentGoal = 5055; // origin -> middle far side of goal // 球門的中遠側
// xPos 對手的球門位置 ok
xPosOpponentGoalPost = 4525; // origin -> middle goal post // 中間目標後
// xPos 對手的底線 ok
xPosOpponentGroundline = 4500; // origin -> middle goal line // 中間目標線
// xPos 對手禁區 ok
xPosOpponentPenaltyArea = 3900; // origin -> middle near penalty area line // 罰球區中線附近
// 這個是 7 米,一半就是 3500 ok
xPosOpponentDropInLine = 3500; // origin -> far end of throw-in line // 擲界外球線的遠端
// 對手點球罰球點
xPosOpponentPenaltyMark = 3200; // origin -> middle penalty mark // 中間點球罰球點
xPosPenaltyStrikerStartPosition = 2200; // 前鋒首發位置
xPosHalfWayLine = 0;
xPosOwnPenaltyMark = -xPosOpponentPenaltyMark;
xPosOwnDropInLine = -xPosOpponentDropInLine;
xPosOwnPenaltyArea = -xPosOpponentPenaltyArea;
xPosOwnGroundline = -xPosOpponentGroundline;
xPosOwnGoalPost = -xPosOpponentGoalPost;
xPosOwnGoal = -xPosOpponentGoal;
xPosOwnFieldBorder = -xPosOpponentFieldBorder;
// 左 場 邊界 ok
yPosLeftFieldBorder = 3700; // origin -> side field boundary 端領域邊界
// 左線 ok
yPosLeftSideline = 3000; // origin -> middle side line 中間側線
// 這個先不管 ok
yPosLeftDropInLine = 2600; // origin -> thow-in line // 邊線發球 線
// 左 禁區 區域 ok
yPosLeftPenaltyArea = 1100; // origin -> middle left penalty area line 禁區區線
// 左邊 目標
// 1500 + 50 + 50 = 1600 / 2 = 800
yPosLeftGoal = 800; // origin -> middle left goal post 中左門柱
yPosCenterGoal = 0;
yPosRightGoal = -yPosLeftGoal;
yPosRightPenaltyArea = -yPosLeftPenaltyArea;
yPosRightDropInLine = -yPosLeftDropInLine;
yPosRightSideline = -yPosLeftSideline;
yPosRightFieldBorder = -yPosLeftFieldBorder;
// 線寬 50mm ok
fieldLinesWidth = 50;
// 中心圓半徑 750mm ok
centerCircleRadius = 750;
// ok
goalPostRadius = 50; // 門柱半徑
// ok
crossBarRadius = goalPostRadius; // 橫樑半徑
// 球門高度 ,官方手冊上說 球門高度是 800 ok
goalHeight = 900;
// 點球罰球點大小 ok
penaltyMarkSize = 100;
// 地毯的邊界
carpetBorder = [
{
from = {x = xPosOpponentFieldBorder; y = yPosRightFieldBorder;};
to = {x = xPosOpponentFieldBorder; y = yPosLeftFieldBorder;};
},{
from = {x = xPosOpponentFieldBorder; y = yPosLeftFieldBorder;};
to = {x = xPosOwnFieldBorder; y = yPosLeftFieldBorder;};
},{
from = {x = xPosOwnFieldBorder; y = yPosLeftFieldBorder;};
to = {x = xPosOwnFieldBorder; y = yPosRightFieldBorder;};
},{
from = {x = xPosOwnFieldBorder; y = yPosRightFieldBorder;};
to = {x = xPosOpponentFieldBorder; y = yPosRightFieldBorder;};
}
];
// 目標 框架 線
goalFrameLines = [
{
from = {x = xPosOwnGoalPost; y = yPosLeftGoal;};
to = {x = xPosOwnGoal; y = yPosLeftGoal;};
},
{
from = {x = xPosOwnGoal; y = yPosLeftGoal;};
to = {x = xPosOwnGoal; y = yPosRightGoal;};
},
{
from = {x = xPosOwnGoalPost; y = yPosRightGoal;};
to = {x = xPosOwnGoal; y = yPosRightGoal;};
},
{
from = {x = xPosOpponentGoalPost; y = yPosLeftGoal;};
to = {x = xPosOpponentGoal; y = yPosLeftGoal;};
},
{
from = {x = xPosOpponentGoal; y = yPosLeftGoal;};
to = {x = xPosOpponentGoal; y = yPosRightGoal;};
},
{
from = {x = xPosOpponentGoalPost; y = yPosRightGoal;};
to = {x = xPosOpponentGoal; y = yPosRightGoal;};
},
];
// 場邊界
fieldBorder = [
{
from = {x = xPosOpponentGroundline; y = yPosRightSideline;};
to = {x = xPosOpponentGroundline; y = yPosLeftSideline;};
},{
from = {x = xPosOpponentGroundline; y = yPosLeftSideline;};
to = {x = xPosOwnGroundline; y = yPosLeftSideline;};
},{
from = {x = xPosOwnGroundline; y = yPosLeftSideline;};
to = {x = xPosOwnGroundline; y = yPosRightSideline;};
},{
from = {x = xPosOwnGroundline; y = yPosRightSideline;};
to = {x = xPosOpponentGroundline; y = yPosRightSideline;};
}
];
// 場 線
fieldLines = [
// field border lines
{
from = {x = xPosOpponentGroundline; y = yPosRightSideline;};
to = {x = xPosOpponentGroundline; y = yPosLeftSideline;};
},{
from = {x = xPosOpponentGroundline; y = yPosLeftSideline;};
to = {x = xPosOwnGroundline; y = yPosLeftSideline;};
},{
from = {x = xPosOwnGroundline; y = yPosLeftSideline;};
to = {x = xPosOwnGroundline; y = yPosRightSideline;};
},{
from = {x = xPosOwnGroundline; y = yPosRightSideline;};
to = {x = xPosOpponentGroundline; y = yPosRightSideline;};
},
// center line
{
from = {x = xPosHalfWayLine; y = yPosLeftSideline;};
to = {x = xPosHalfWayLine; y = yPosRightSideline;};
},
// penalty areas
{
from = {x = xPosOwnGroundline; y = yPosLeftPenaltyArea;};
to = {x = xPosOwnPenaltyArea; y = yPosLeftPenaltyArea;};
},{
from = {x = xPosOwnPenaltyArea; y = yPosLeftPenaltyArea;};
to = {x = xPosOwnPenaltyArea; y = yPosRightPenaltyArea;};
},{
from = {x = xPosOwnPenaltyArea; y = yPosRightPenaltyArea;};
to = {x = xPosOwnGroundline; y = yPosRightPenaltyArea;};
},
{
from = {x = xPosOpponentGroundline; y = yPosLeftPenaltyArea;};
to = {x = xPosOpponentPenaltyArea; y = yPosLeftPenaltyArea;};
},{
from = {x = xPosOpponentPenaltyArea; y = yPosLeftPenaltyArea;};
to = {x = xPosOpponentPenaltyArea; y = yPosRightPenaltyArea;};
},{
from = {x = xPosOpponentPenaltyArea; y = yPosRightPenaltyArea;};
to = {x = xPosOpponentGroundline; y = yPosRightPenaltyArea;};
},
// penalty and center marks
{
from = {x = 3150; y = 0;};
to = {x = 3250; y = 0;};
},{
from = {x = xPosOpponentPenaltyMark; y = -fieldLinesWidth;};
to = {x = xPosOpponentPenaltyMark; y = fieldLinesWidth;};
},
{
from = {x = -3150; y = 0;};
to = {x = -3250; y = 0;};
},{
from = {x = xPosOwnPenaltyMark; y = -fieldLinesWidth;};
to = {x = xPosOwnPenaltyMark; y = fieldLinesWidth;};
},
{
from = {x = -fieldLinesWidth; y = 0;};
to = {x = fieldLinesWidth; y = 0;};
}
];
// 中心圓
centerCircle = {
center = {x = xPosHalfWayLine; y = 0;};
radius = centerCircleRadius;
numOfSegments = 16;
};
// 角落
corners = {
xCorner = [
{x = xPosHalfWayLine; y = centerCircleRadius;},
{x = xPosHalfWayLine; y = -centerCircleRadius;}
];
tCorner0 = [
{x = xPosHalfWayLine; y = centerCircleRadius;},
{x = xPosHalfWayLine; y = -centerCircleRadius;},
{x = xPosOwnGroundline; y = yPosLeftPenaltyArea;},
{x = xPosOwnGroundline; y = yPosRightPenaltyArea;}
];
tCorner90 = [
{x = xPosHalfWayLine; y = centerCircleRadius;},
{x = xPosHalfWayLine; y = -centerCircleRadius;},
{x = xPosHalfWayLine; y = yPosRightSideline;}
];
tCorner180 = [
{x = xPosHalfWayLine; y = centerCircleRadius;},
{x = xPosHalfWayLine; y = -centerCircleRadius;},
{x = xPosOpponentGroundline; y = yPosLeftPenaltyArea;},
{x = xPosOpponentGroundline; y = yPosRightPenaltyArea;}
];
tCorner270 = [
{x = xPosHalfWayLine; y = centerCircleRadius;},
{x = xPosHalfWayLine; y = -centerCircleRadius;},
{x = xPosHalfWayLine; y = yPosLeftSideline;}
];
lCorner0 = [
{x = xPosHalfWayLine; y = centerCircleRadius;},
{x = xPosHalfWayLine; y = -centerCircleRadius;},
{x = xPosOwnGroundline; y = yPosLeftPenaltyArea;},
{x = xPosOwnGroundline; y = yPosRightPenaltyArea;},
{x = xPosHalfWayLine; y = yPosRightSideline;},
{x = xPosOwnGroundline; y = yPosRightSideline;},
{x = xPosOpponentPenaltyArea; y = yPosRightPenaltyArea;}
];
lCorner90 = [
{x = xPosHalfWayLine; y = centerCircleRadius;},
{x = xPosHalfWayLine; y = -centerCircleRadius;},
{x = xPosOpponentGroundline; y = yPosLeftPenaltyArea;},
{x = xPosOpponentGroundline; y = yPosRightPenaltyArea;},
{x = xPosHalfWayLine; y = yPosRightSideline;},
{x = xPosOpponentGroundline; y = yPosRightSideline;},
{x = xPosOwnPenaltyArea; y = yPosRightPenaltyArea;}
];
lCorner180 = [
{x = xPosHalfWayLine; y = centerCircleRadius;},
{x = xPosHalfWayLine; y = -centerCircleRadius;},
{x = xPosOpponentGroundline; y = yPosLeftPenaltyArea;},
{x = xPosOpponentGroundline; y = yPosRightPenaltyArea;},
{x = xPosHalfWayLine; y = yPosLeftSideline;},
{x = xPosOpponentGroundline; y = yPosLeftSideline;},
{x = xPosOwnPenaltyArea; y = yPosLeftPenaltyArea;}
];
lCorner270 = [
{x = xPosHalfWayLine; y = centerCircleRadius;},
{x = xPosHalfWayLine; y = -centerCircleRadius;},
{x = xPosOwnGroundline; y = yPosLeftPenaltyArea;},
{x = xPosOwnGroundline; y = yPosRightPenaltyArea;},
{x = xPosHalfWayLine; y = yPosLeftSideline;},
{x = xPosOwnGroundline; y = yPosLeftSideline;},
{x = xPosOpponentPenaltyArea; y = yPosLeftPenaltyArea;}
];
};