agent2d

概要

agent2dはlibrcscに依存しているため,agent2dの実行には,agent2dでビルドしたプログラムバイナリに加えてlibrcscのライブラリファイルも必要となります. このページでは,librcscのライブラリをエージェントプログラムと同梱して配布する方法を説明します.

  • 注意その1 librcsc-3.0.xを使用する場合,スタティックリンクバイナリを作ると重大な不具合を起こす可能性があります.
  • 注意その2 librcscのライセンス上、スタティックリンクバイナリを作ることは推奨されません.

注意事項

バイナリの互換性について (2007-03-04)

gcc-3.3以前とgcc-3.4以降では,作成されるバイナリに下位互換性がありません. また,autotoolsを使用していると,基本的にlibstdc++.aとはstaticリンクされないそうです. よって,gcc-3.3以前の環境で動作するバイナリを作るには,gcc-3.3以前のバージョンを使用してコンパイルしなければなりません. (lddで表示されるライブラリを同梱してLD_LIBRARY_PATHを設定しておけば動くかもしれませんが,未確認)

更に,Linuxカーネルのバージョン差が大きすぎても正しく動作しないことがあります. 古い環境で動作させたい場合は,なるべくそれと近い環境でコンパイルすることをお勧めします.

手順

librcscの再インストール

既にlibrcscがインストールされている場合は,先にアンインストールします.

$ cd librcsc-x.x.x
$ make uninstall

パッケージ内の既存の生成ファイルを全て削除します.

$ make distclean

以下のようにconfigureを再実行し,再インストールします. CXXFLAGSを指定し忘れると,最終的にできあがるバイナリファイルのサイズが巨大になります.

$ ./configure --prefix=インストール先 CXXFLAGS="-O2 -march=i686"
$ make
$ make install

agent2dの再ビルド

パッケージ内の既存の生成ファイルを全て削除します.

$ cd agent2d-x.x.x
$ make distclean

以下のようにconfigureを再実行します. librcscと同様,CXXFLAGを指定してください.

$ ./configure --with-librcsc=インストール先 CXXFLAGS="-O2 -march=i686"

コンパイルします.

$ make

スクリプト

以下に起動スクリプトの例を張りつけておきます. 参考にしてください. チーム名や設定ファイルの指定は,自分のチームにあわせたものに修正してください.

  • start
    #! /bin/bash
    
    SSILSERVER=localhost
    TEAMDIR=/home/ssil/2d/チーム名
    # TEAMDIR=$PWD
    LOGIN=ssil
    #LOGIN=$USER
    
    trap kill_team INT
    
    kill_team()
    {
           echo "Killing Team"
           ssh -l ${LOGIN} ${SSILSERVER} -f ${TEAM_DIR}/kill1
           exit 0
    }
    
    ssh -l ${LOGIN} ${SSILSERVER} "${TEAMDIR}/start1 ${SSILSERVER} ${TEAMDIR}" &
    
    wait
  • start1
    #! /bin/bash
    
    host=$1
    DIR=$2/バイナリディレクトリ
    teamname="接続用チーム名"
    
    export LD_LIBRARY_PATH=$DIR
    
    echo -n "$teamname: Start agents at "
    hostname
    
    player="${DIR}/sample_player"
    coach="${DIR}/sample_coach"
    config="${DIR}/player.conf"
    config_dir="${DIR}/formations-dt"
    
    OPT="-h ${host} -t ${teamname}"
    OPT="${OPT} --player-config ${config} --config_dir ${config_dir}"
    
    echo "Start 1: ${player} ${OPT} -g"
    ${player} ${OPT} -g &
    
    sleep 6
    
    i=2
    while [ $i -le 11 ] ; do
      echo "Start ${i}: ${player} ${OPT}"
      ${player} ${OPT} &
      sleep 1
      i=`expr $i + 1`
    done
    
    ${coach} -h ${host} -t ${teamname} &
  • kill1
    #! /bin/bash
    echo -n "Kill agents at "
    hostname
    
    player=sample_player
    coach=sample_coach
    
    killall ${player}
    killall ${coach}
    
    killall -KILL ${player}
    killall -KILL ${coach}

動作確認

まず,lddコマンド (Mac OSXではotools -L)で依存ライブラリを調べます.

$ ldd sample_player
$ ldd sample_coach

表示されたライブラリファイルを全て,プログラムバイナリと同じディレクトリへコピーしてください.

次に、librcscをアンインストールします.

$ cd librcsc-x.x.x
$ make uninstall

librcscをアンインストールした状態でagent2dのチームを起動します. チームの起動に成功すれば,agent2d単体で実行可能となっています.

$ cd agent2d-x.x.x/src
$ ./start.sh

アップロード用パッケージ作成

後は,アップロード用にバイナリファイル,設定ファイル,スクリプトをまとめるだけです.

$ cp -a agent2d-x.x.x/src バイナリディレクトリ
$ cd バイナリディレクトリ
$ rm -rf *.{h,cpp,o,in} Makefile* .deps sample_trainer
$ cd ..
$ cp agent2d-x.x.x/{start,start?,kill?} .  (スクリプトをバイナリディレクトリのひとつ上にコピー)
$ tar czvf  チーム名.tar.gz バイナリディレクトリ start start? kill?
  ファイルサイズを確認
$ ls -gh  チーム名.tar.gz
  概ね,2Mバイト以下になっているはずです. 
  それ以上のファイルサイズになっている場合は,configure時にCXXFLAGSを指定し忘れたか,
  余計なファイルが含まれている可能性があります.

スクリプトのテストもやっておいた方が無難です.

$ tar xzvf チーム名.tar.gz
start を編集して,TEAMDIR変数とLOGIN変数を自分の環境にあわせたものに修正してください.
上記のサンプルの,コメントアウトした内容と交換するだけでOKだと思います.
$ (別ターミナルで)  rcssserver
$ $PWD/start    (絶対パスで start を実行)

パスワードのプロンプトが表示されるかもしれませんが,パスワードを打ってチームが起動されれば成功です.

クイックリファレンス

$ cd librcsc-x.x.x
$ make uninstall
$ ./configure --prefix=インストール先 CXXFLAGS="-O2 -march=i686"
$ make
$ make install

$ cd agent2d-x.x.x
$ make distclean
$ ./configure --with-librcsc=インストール先 CXXFLAGS="-O2 -march=i686"
$ make
$ cd agent2d-x.x.x/src 
$ ldd sample_player
$ ldd sample_player
$ cp 依存ライブラリ .   (lddで表示された依存ライブラリをコピー)
$ cd librcsc-x.x.x
$ make uninstall
$ cd agent2d-x.x.x/src
$ ./start.sh

$ cp -a agent2d-x.x.x/src バイナリディレクトリ
$ cd バイナリディレクトリ
$ rm -rf *.{h,cpp,o,in} Makefile* .deps sample_trainer
$ cd ..
$ cp agent2d-x.x.x/{start,start1,kill1} .  (スクリプトをバイナリディレクトリのひとつ上にコピー)
$ tar czvf  チーム名.tar.gz バイナリディレクトリ start start? kill?

librcscの再インストールが面倒な人向け

stripコマンドでデバッグシンボルを取り除くのみ。 ただし,stripしたバイナリが期待通りに動作することは保証しません.

$ cp -a agent2d-x.x.x/src バイナリディレクトリ
$ cd バイナリディレクトリ
$ strip librcsc_* sample_player sample_coach

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2016-03-14 (月) 14:51:37 (2136d)
SourceForge.JP
Creative Commons License
RoboCup tools by Hidehisa Akiyama is licensed under a Creative Commons 表示-非営利 2.1 日本 License.