BTR2022の解説(game2022.py)
まずは,わかりやすい方から.
ゲームを実行するときに,game2022.py を使います.
以下,頭から見た構成です.
#!/usr/bin/python TEAMNAME = "BabyTigers" FIELDMINX = -5 FIELDMAXX = -1 FIELDMINY = 1 FIELDMAXY = 5 FIELDSIZEX = (FIELDMAXX - FIELDMINX) + 1 FIELDSIZEY = (FIELDMAXY - FIELDMINY) + 1 FIELDSIZE = FIELDSIZEX * FIELDSIZEY MAXSTEP = 999
最初に定数を定義しています.
チーム名と経路探索用の情報です.
今は関係しませんので,読み飛ばしましょう.
その次にimport 関係が並んでいます.
(本当は,定数よりも先に書くべきなのかも….あとで順番を入れ替えます)
ここも,今は読む必要はありません.
その後,再度,経路用の定数(配列変数)が並んでいますが,ここも読み飛ばしましょう.
def goToPoint(x, y, theta): def moveRobotino(x, y, theta): def goToInputVelt(): # original position is 355 (= 5 + 50*7) def goToOutputVelt(): # original position is 305 (= 5 + 50*6) def goToMPSCenter(distance): def turnClockwise(): def turnCounterClockwise(): def getWork(): def putWork():
Robotino を動かすための昔のコードです.
今は使っていません.
この前まではrobotino2022.pyで,今はbtr2022.pyで扱うようにしています.
のちほど,削除します.
def beaconSignal(data): def explorationInfo(data): def gameState(data): def machineInfo(data): def machineReportInfo(data): def orderInfo(data): def ringInfo(data): def navigationRoutes(data): def sendBeacon(): def sendMachineReport(report): def sendPrepareMachine(data):
RefBox との通信のプログラムです.読み飛ばして下さい.
def robotinoOdometry(data): def robotinoVelocity(data):
RobViewを使っていた時のソースです.
OdometryはRefBoxにBeaconを送るのに必要なので,あとで修正します.
Velocityは,現Robotino用のROSだと,取ってこれません(必要かなぁ?)
def startGrasping():
Graspingチャレンジのプログラムです.
一部(ワークの把持とMPS周りの回転)のプログラムが本ソースを参照するようになっていますので,あとで修正します.
def initField(): def setField(x, y, number): def getField(x, y): def zoneToPose2D(zone): def setMPStoField(): def getStep(x, y): def wallCheck(x, y, dx, dy): def getNextDirection(x, y): def makeNextPoint(destination):
経路選択用の関数です.
def getNextPoint(pointNumber): def startNavigation():
Navigationチャレンジのプログラムです.
RefBox から受け取った「未到達のMPSリスト」の先頭のゾーンに対して,経路を構築し,一つずつ進む(縦横のマス目に従って進む)形です.
# main # if __name__ == '__main__':
ここからがmain関数です ← ここを最初に見ろと言う声もアリ.
args = sys.argv if (len(args) >= 2): challenge = args[1] if (len(args) >= 3): robotNum = int(args[2]) else: robotNum = 1
引数として,1つ目がchallenge名,2つ目がロボット番号です(省略したら1).
RefBox やROS関係の初期設定があり,
btrRobotino = btr2022.btr2022() pose = Pose2D() pose.x = -1000 * robotNum - 1500 pose.y = 500 pose.theta = 90
btr2022.py をbtrRobotinoとして持ってきています.
初期座標は,ロボット投入口です.
1台目は(-2500,500,90),2台目は(-3500,500,90),3台目は(-4500,500,90)となります.
※チームカラーを見ていない気がする.Magentaの時は反転しないといけませんね.
if (challenge == "grasping"): startX = [ -500, -4500, -500] startY = [ 500, 1500, 4500] startTheta = [ 90, 90, 180] pose.x = startX[robotNum - 1] pose.y = startY[robotNum - 1] pose.theta = startTheta[robotNum - 1] if (challenge == "driving" or challenge == "positioning"): pose.x = zoneX["S31"] pose.y = zoneY["S31"] pose.theta = 90 print(pose.x, pose.y, pose.theta) if (challenge == "reset"): # goToPoint(-800, -1500, 90) goToPoint(pose.x, pose.y, pose.theta) exit()
先ほどの座標はMain Track用ですので,challenge用の座標を個別に設定しています.
(第一引数にresetをいれると,とりあえず初期位置にロボットが直線的に移動します)
print(challenge) challengeFlag = True # while True: while not rospy.is_shutdown(): # sendBeacon() # print("sendBeacon") if (challenge == "test" and challengeFlag):
以降,challenge の値で分岐して,各プログラムが動きます.
プログラムの動作確認をしたいときは,上記のような感じでchallenge名をtest とかにして分岐を書けば,実行できます.
とりあえず,ざくっとgame2022.py の説明は以上です.
コメントを残す