RoboCup仿真3D TC筆記(2014年合肥中國公開賽 仿真3D比賽環境搭建)

所謂「TC「,就是Technology Committee(技術委員),講的好像很厲害,實則就一「網管」。php

TC的技術含量其實不高,可是涉及的東西不少很雜,網上零零散散的都有,在這裏我想總的整理一下,算是栽顆小樹吧…css

注:若是你只想本身裝個環境寫代碼的話,請不要看如下寫的,真的是無比之煩,建議你看官網的這個或其餘博客:java

http://simspark.sourceforge.net/wiki/index.php/Installation_on_Linux;linux

 

接下來,我將按如下流程講解一下RoboCup仿真3D比賽環境的搭建方法:git

1. 硬件要求:shell

(1)電腦硬件要求;數據庫

(2)交換機硬件要求;ubuntu

(3)網線硬件要求;vim

2. 各個電腦任務分配;ruby

3. 網絡拓撲結構與IP配置(主要針對配置A、B兩組);

4. 系統安裝與更新;

5. 軟件安裝與系統配置(最麻煩的地方);

6. 測試與使用。

 

如下是幾個主要參考資料和當時最新版軟件,若是你要找更新的版本,請自行到相應網站查找:

比賽環境搭建說明2013英文版: http://vdisk.weibo.com/s/A9EtgmXv_PvAg/1414220729

simspark-0.2.4 : http://vdisk.weibo.com/s/A9EtgmXv_Pvfp/1414220781

rcssserver3d-0.6.8.1 : http://vdisk.weibo.com/s/A9EtgmXv_PvOT/1414221074

rcssserver3d-0.6.8.1 補丁(沒這個補丁問題也不大) : http://vdisk.weibo.com/s/A9EtgmXv_PvOH/1414221055

ode-0.11.1-tbb:http://vdisk.weibo.com/s/A9EtgmXv_Ptpj/1414236805

roboviz:http://vdisk.weibo.com/s/A9EtgmXv_Ptp6/1414236776

proxy:http://vdisk.weibo.com/s/A9EtgmXv_Ptp8/1414236797

rclm2:http://vdisk.weibo.com/s/A9EtgmXv_Ptp4/1414236789

restore.py: http://vdisk.weibo.com/s/A9EtgmXv_OXft/1414335116

shFor3D.tar.gz: http://vdisk.weibo.com/s/A9EtgmXv_Pg4s/1414380754

 

 

1. 硬件要求:

(1) 電腦:

總共要5臺(i5/i7 x 1; 中檔以上顯卡 x 1; i3 配置以上 x 2; 配置隨意 x 1)

由於比賽分爲A、B兩個小組,一組須要5臺,因此此次比賽有10臺。這裏只以一組舉例。

(此次組織方放血了,給的配置都超預期了,另外,那個「中檔以上顯卡的電腦」最好用英偉達的,顯卡驅動比較好裝)

(2)交換機:

要一臺Gibibit的,也就是千兆交換機,雖然說交換機基本都是千兆的,但以前的安徽省比賽就只給了個百兆的……

分A、B兩組比賽時,須要兩臺。

(3)網線:

通常的網線就行。

以上信息,基本就是那個"2013年英文版「的翻譯。

 

2. 各個電腦任務分配:

正所謂「好記性不如爛筆頭」,比賽場上有10臺電腦,很難搞清誰是誰,因此最好每一個都貼個標籤。

 

(1)cpu最強的那臺運行rcssserver3d,給它貼個標籤:servera;

(名字這麼看,「server」 + 「a」,"server"好理解,」a"表示A組,由於我用A組舉例的嘛!)

(2)「中檔以上顯卡」的那臺運行roboviz,給它貼個標籤: monitora

(3)cpu次強的兩臺分別運行兩方球隊,分別標記:clienta1,clienta2

(4)配置最差的那臺,做爲NFS和NIS,標記:robocup3dfa;

(爲何是"robocup3d"+"f"+"a"呢?由於這臺要裝fedora。別看這臺硬件配置無所謂,但它倒是這個比賽環境的核心!)

 

3. 網絡拓撲結構與IP配置(主要針對配置A、B兩組-----10臺電腦):

這步其實就是在說10臺電腦接網線的問題。

若是隻有一組電腦的話,那倒容易,5臺電腦都接在同一個交換機上,並給每臺電腦分配同一網域的不一樣IP便可。

可麻煩就在於有兩組電腦,並且正式比賽時還要求各自獨立!!! 我心都碎成渣渣了……

記得經常使用的兩個命令:

查看IP:ifconfig

查看連接通斷: ping

 

如下將分爲三個階段分別給出以及IP配置結構圖:

(1)用於軟件更新與軟件安裝階段:

由於咱們還要系統更新和軟件安裝,因此還要連上Internet。

這時候的IP地址基本是當地網絡自行分配的,也可能要本身設定,但方式不重要,重要的是能上網就行。

那個Internet是連到switch2仍是連到switch1上都無所謂咯,這裏就連在switch2上了。

 

(2)用於代碼上傳和代碼測試階段:

這個時候就要本身給電腦分配IP地址了,如下是我給的IP配置,你能夠根據本身的習慣,給本身弄個熟悉的。

monitora:   192.168.2.11    monitorb:  192.168.2.21

servera:     192.168.2.12    serverb:    192.168.2.22

clienta1:     192.168.2.13    clientb1:    192.168.2.23

clienta2:     192.168.2.14    clientb2:    192.168.2.24

robocup3dfa:  192.168.2.19    robocup3dfb:  192.168.2.29

全部的子網掩碼(Netmask):255.255.255.0

全部的網關(gateway): 192.168.2.1(明白人應該知道這個是瞎掰的)

全部的dns: 不用設置(或8.8.8.8)

"AP"指的是無線路由器,它是用來讓你們遠程上傳代碼的,給它的IP是「192.168.2.100」,「100」是隨便選的,只要別和上面的同樣,隨你怎麼配。

"AP"是連在switch1仍是switch2上都無所謂,這裏我連在switch1上了。

(這裏要說明一下爲何是「192.168.2.xxx「而不是"192.168.1.xxx",由於無線路由器常常分配192.168.1.xxx",爲了不衝突,就用".2"了,固然".3"、「.4"也能夠咯。

若是你對網絡不熟悉的話,這句話的進一步理解還獲得實踐中去體會。)

 

(3)用於正式比賽:

這就讓A、B組的機器獨立了,不會相互干擾了。

4. 系統安裝與更新:

繼續只用A組舉例:

本次比賽使用兩種linux操做系統:

Ubuntu 12.04 64bit:monitora,servera,clienta1,clienta2

Fedora 20 64bit:robocup3dfa

注意:

1. 在系統安裝過程當中,會提示設置初始用戶的用戶名,Ubuntu還會提示設置主機名。

2. 爲了方便記憶考慮,推薦就按以上名字設置:如monitora裝Ubuntu時,相應的初始用戶名和主機名就都設爲monitora。

3. 建議全部電腦用同一個密碼,之後用起來方便。

系統更新:

Ubuntu:

 

切換root身份:
sudo -i

更新:
apt-get update -y

 

Fedora:

切換root身份
su
-

先裝一個自動搜索最快鏡像的插件
yum install yum-plugin-fastestmirror.noarch -y

更新:
yum update -y

 

5. 軟件安裝與系統配置(最麻煩的地方):

首先,咱們回顧一下「2. 各個電腦任務分配」裏說的東西:

servera:運行rcssserver3d;

monitora:運行roboviz;

clienta1和clienta2 :運行球隊程序;

robocup3dfa:作NFS和NIS;

安裝軟件固然要根據它們的不一樣做用來安裝咯!

 

爲了之後配置考慮,咱們先給全部的Ubuntu系統配置root密碼:

 passwd root

 

好了,那麼就先從

(1)servera開始吧:

安裝ssh服務:
 apt-get install openssh-server openssh-client -y
安裝vim編輯器(若是須要的話): apt
-get install vim -y
安裝編譯器:
apt-get install g++ -y
安裝各類其餘依賴庫和相關工具: apt-get install subversion cmake libfreetype6-dev libode-dev libsdl-dev ruby ruby-dev libdevil-dev libboost-dev libboost-thread-dev libboost-regex-dev libboost-system-dev libtbb-dev build-essential automake libtool git libboost-program-options-dev libboost-thread-dev aptitude -y

編譯和安裝多線程ode(建議不要裝,裝過以後server很容易崩潰,並且沒它也不影響各個球隊表現(多虧KylinSky我才知道這個狀況的!)。只是標準要求要用,不過此次比賽就沒裝它):
cd ode-0.11.1-tbb/
./autogen.sh
./configure --enable-shared --enable-malloc LIBS=-lX11
make -j && make install

編譯安裝simspark(我這裏就不說明補丁了,說了反而添堵,本身看裏面的README,很容易本身加上去):
cd rcssserver3d-0.6.8.1
mkdir build
cd build
cmake ..
make
make install
ldconfig

 

如今就能夠運行球場平臺了,試試吧!

(2)monitora:

安裝ssh服務:
 apt-get install openssh-server openssh-client -y
 
安裝vim編輯器(若是須要的話):
 apt-get install vim -y

安裝編譯器:
 apt-get install g++ -y

安裝各類其餘依賴庫和相關工具:
 apt-get install subversion cmake libfreetype6-dev libode-dev libsdl-dev ruby ruby-dev libdevil-dev libboost-dev libboost-thread-dev libboost-regex-dev libboost-system-dev libtbb-dev build-essential automake libtool git libboost-program-options-dev libboost-thread-dev aptitude -y
(其實以上和servera的安裝同樣,其實還多裝了一些,圖個省心,就這樣了)

安裝java,爲了運行roboviz:
apt-get install openjdk-6-jdk openjdk-6-jre -y

配置roboviz(我以上給的roboviz是個配置好的,不用再配置了):
cd roboviz
./build-linux64.sh

設置roboviz的server的IP:
其實如今你就能夠打開roboviz了,只是一片黑。
這是理所固然的,要知道monitora上是沒有rcssserver3d的,rcssserver3d在servera上。
修改文件:roboviz/bin/linux-amd64/resources/config.txt
將其中: Server Host          :
localhost
改成: Server Host          : 192.168.2.12

安裝rclm2(全名RoboCupLeagueManager),它的做用估計也能猜出個大概了吧,先裝着,回頭還要說它:
./configure
make
make install

 

如今,你能夠在servera上運行rcssserver3d,而在monitora上運行roboviz了,這樣負荷就從一臺機器轉移到兩臺機器上去了(固然,還有交換機)。

(3)clienta1和clienta2:

安裝ssh服務:
 apt-get install openssh-server openssh-client -y
 
安裝vim編輯器(若是須要的話):
 apt-get install vim -y

安裝編譯器:
 apt-get install g++ -y

安裝各類其餘依賴庫和相關工具:
 apt-get install subversion cmake libfreetype6-dev libode-dev libsdl-dev ruby ruby-dev libdevil-dev libboost-dev libboost-thread-dev libboost-regex-dev libboost-system-dev libtbb-dev build-essential automake libtool git libboost-program-options-dev libboost-thread-dev aptitude -y

安裝java,爲了運行proxy:
 apt-get install openjdk-6-jdk openjdk-6-jre -y
(和monitora同樣,只是java的做用不同)

 

ubuntu都OK啦!

只要Ubuntu們OK了,基本的比賽環境也就能夠了。

如今能夠就能夠按照如下方式開始比賽了:

servera    運行    rcssserver3d
monitora   運行    roboviz
clienta1   運行    ./start.sh 192.168.2.12
clienta2   運行    ./start.sh 192.168.2.12

 

「原來這樣就能夠啦!」

嗯……確實能夠這麼說,不過,還有幾個問題,你要是如今不給解決了,後頭有的是苦吃的:

問題1:你要讓各個球隊怎麼上傳代碼?U盤拷貝不是不行,只是到時那麼多人,不但有上傳,還有測試的,測試不行還有再上傳的……有你受的了;

問題2:不要忘記哦!每有一隊上傳代碼,你不但要給clienta1傳一份,還得要給clienta2也要傳一份,人一多,事兒一多,就有你混亂的了;

問題3:一個組基本有6到7支隊伍,打單循環賽,你要怎麼讓每兩隊之間打一場?是讓一支隊伍先和剩下全部隊伍打嗎,而後再讓一支隊伍和剩下全部球隊打嗎?

         雖然說是機器人,咱也不能這麼累着人家啊。比賽場次安排也得有個規範的。

(4)robocup3dfa:

TC的價值如何體現,就是要看這臺機器配置的怎麼樣了,很少說了,開始吧:

如下有不少配置,我是用本身寫的shell腳原本完成的,每一個腳本的功能都很簡單:shFor3D.tar.gz

 (robocup3dfa上的全部命令均已root身份運行,除非有特別說明處!!!!!!

 

先是些基本軟件工具:

安裝vim編輯器(若是須要的話)
yum install vim -y; 

安裝syslog(當時很驚訝,fedora20竟然沒有自帶這個服務)
yum install rsyslog.x86_64 -y

開啓syslog服務:
systemctl enable rsyslog
systemctl start rsyslog

 

在下載下來的shFor3D.tar.gz,有我寫的一個用於遠程測試的c源程序,很簡單,兩個文件共115行(包括空行),先解壓編譯,已備後用(更多說明見「其餘重要信息」):

解壓sim3dStart
tar -axf sim3dStart.tar.gz

編譯sim3dStart服務器和客戶端
cd sim3dStart/
gcc sim3dStart-server.c -o sim3dStart-server
gcc sim3dStart-client.c -o sim3dStart-client

 

I. 安裝和配置NFS服務器:

啥是NFS(NetworkFileSystem)服務器呢,簡單點說,就是個遠程U盤,能夠經過網絡「插」在多臺電腦上。

更進一步可參考:《鳥個的linux私房菜(服務器)》----NFS服務器

安裝NFS須要的兩個軟件:
yum install rpcbind.x86_64 -y; 
yum install nfs-utils.x86_64 -y; 

shFor3D裏有個teams文件,用來羅列隊名的,很重要!shFor3D裏的腳本基本都用到它(一行一個隊名,如下是今年的示例,其中ccwss1和ccwss2爲測試用戶):
ccwss1
ccwss2
AHJZU_3D
Apollo3D
CIT3D
Dreamwing3D
HS
HfutEngine3D
Icarus
Kylinsky3D
Miracle3D
NBUT_kylin
SEU_Jolly
Strive3D
YuShan3D

建立NFS開放的目錄(其實我要開放的是各個參賽隊伍的主目錄,固然也要同時建立這些用戶咯), .
/UsersInit.sh 運行過以後會產生一個usersPasswd.txt的文件,名面有對應各個用戶的用戶名與密碼 (其實這個腳本還有另外一種用法,參見「其餘重要信息」)

若是有用戶信息錯誤,如下命令能夠刪除全部用UsersInit.sh建立的用戶:
./UserDel.sh

如今每一個用戶已被建立,而且主目錄被創建在/robocup3D下,好比ccwss1的主目錄爲:/robocup3D/ccwss1

設置NFS的配置文件,即標出要開放那些目錄: /etc/exports
在文件中添加如下內容:
/robocup3D/ccwss1       127.0.0.1(rw,no_root_squash)    192.168.2.0/24(rw,no_root_squash)
/robocup3D/ccwss2       127.0.0.1(rw,no_root_squash)    192.168.2.0/24(rw,no_root_squash)
/robocup3D/AHJZU_3D     127.0.0.1(rw,no_root_squash)    192.168.2.0/24(rw,no_root_squash)
/robocup3D/Apollo3D     127.0.0.1(rw,no_root_squash)    192.168.2.0/24(rw,no_root_squash)
/robocup3D/CIT3D        127.0.0.1(rw,no_root_squash)    192.168.2.0/24(rw,no_root_squash)
/robocup3D/Dreamwing3D  127.0.0.1(rw,no_root_squash)    192.168.2.0/24(rw,no_root_squash)
/robocup3D/HS           127.0.0.1(rw,no_root_squash)    192.168.2.0/24(rw,no_root_squash)
/robocup3D/HfutEngine3D 127.0.0.1(rw,no_root_squash)    192.168.2.0/24(rw,no_root_squash)
/robocup3D/Icarus       127.0.0.1(rw,no_root_squash)    192.168.2.0/24(rw,no_root_squash)
/robocup3D/Kylinsky3D   127.0.0.1(rw,no_root_squash)    192.168.2.0/24(rw,no_root_squash)
/robocup3D/Miracle3D    127.0.0.1(rw,no_root_squash)    192.168.2.0/24(rw,no_root_squash)
/robocup3D/NBUT_kylin   127.0.0.1(rw,no_root_squash)    192.168.2.0/24(rw,no_root_squash)
/robocup3D/SEU_Jolly    127.0.0.1(rw,no_root_squash)    192.168.2.0/24(rw,no_root_squash)
/robocup3D/Strive3D     127.0.0.1(rw,no_root_squash)    192.168.2.0/24(rw,no_root_squash)
/robocup3D/YuShan3D     127.0.0.1(rw,no_root_squash)    192.168.2.0/24(rw,no_root_squash)

開放防火牆(也是個腳本,每次重啓時都要運行一下):
./iptables_rule.sh

開啓NFS服務:
systemctl enable nfs-server.service
systemctl start nfs-server.service

 

到這裏,robocup3dfa上NFS服務器就算配置完畢了!

如今咱們要暫且回到ubuntu,去安裝NFS客戶端(每臺Ubuntu都要按裝):

安裝nfs客戶端(aptitude和apt-get的功能同樣,由於這是從別人blog上抄的,尊重原版,我也就這樣寫了)
aptitude -y install nfs-common

 

好啦!你如今已經完成NFS的全套配置了。

你在Ubuntu機器上來這樣測試一下(注意,此時要先按3. 網絡拓撲結構與IP配置」中「(2)用於代碼上傳和代碼測試階段」的方式來設置fedora和ubuntu的IP):

showmount -e 192.168.2.19
成功的話有相似下列輸出:

Export list for localhost:
/robocup3D/ccwss1       127.0.0.1(rw,no_root_squash)    192.168.2.0/24(rw,no_root_squash)
/robocup3D/ccwss2       127.0.0.1(rw,no_root_squash)    192.168.2.0/24(rw,no_root_squash)
/robocup3D/AHJZU_3D     127.0.0.1(rw,no_root_squash)    192.168.2.0/24(rw,no_root_squash)
........................................(如下省略)........................................
基本就是和你剛剛配置的在fedora上的配置文件/etc/exports同樣

 

2012年和2013年我都作過國賽的TC助手,這兩界把NFS搭建完畢以後,差很少就算整個環境搭建完成了。

如今咱們不妨測試一下(注意,此時要先按「3.網絡拓撲結構與IP配置」中「(2)用於代碼上傳和代碼測試階段」的方式來設置fedora和Ubuntu的IP),

在clienta1上操做:
新建兩個文件夾:
mkdir -p myccwss1 myccwss2

掛載NFS的兩個開放目錄到剛剛新建的文件夾中:
mount -t nfs 192.168.2.19:/robocup3D/ccwss1 myccwss1 mount -t nfs 192.168.2.19:/robocup3D/ccwss2 myccwss2

在clienta2上操做:
(同clienta1)
這時你能夠在clienta1(或clienta2)上覆制兩份可執行文件分別放到myccwss1和myccwss2裏。
假設你是在clienta1上進行復制的,此時你會驚奇的發現clienta2裏的myccwss1和myccwss2也有了剛剛複製的文件。
這就是NFS,一臺電腦的硬盤(robocup3dfa)被多臺電腦分享了。

仍是按剛剛的方式:
servera    運行    rcssserver3d
monitora   運行    roboviz
clienta1   運行    ./start.sh 192.168.2.12 clienta2 運行 ./start.sh 192.168.2.12
開始比賽吧!
 

不過,本着「不做死就不會死」的精神,咱們從Ubuntu回到fedora上繼續(若是你剛剛進行了測試,請還原IP到能上網的狀態):

II. 安裝和配置NIS服務器:

啥是NIS(NetworkInfomationSystem)服務器呢?說很差,總之是用來統一管理用戶等一系列信息用的。

它主要有兩個程序組成:ypserv和yppasswd。

更進一步可參考:《鳥個的linux私房菜(服務器)》----NIS服務器

 

安裝NIS服務器程序(ypserv),同時這也是robocup3dfa上最後要安裝的軟件,安裝完成後請按3. 網絡拓撲結構與IP配置」中「(2)用於代碼上傳和代碼測試階段」的方式來設置robocup3dfa的IPyum install ypserv.x86_64 -y

設置NIS(ypserv)配置文件,設置域名與固定ypserv端口:/etc/sysconfig/network
(在文件最後追加)
NISDOMAIN=robocup3dfa
YPSERV_ARGS="-p 1011"

設置NIS(ypserv)配置文件,設置NIS服務網域:/etc/ypserv.conf
(在文件最後追加)
127.0.0.0/255.255.255.0 :       *:      *:      none
192.168.2.0/255.255.255.0:      *:      *:      none

設置NIS配置文件,設置IP與域名對應關係:/etc/hosts
(在文件最後追加)

  192.168.2.11    monitora

  192.168.2.12    servera

  192.168.2.13    clienta1

  192.168.2.14    clienta2

  192.168.2.19    robocup3dfa

設置NIS(yppasswd)配置文件,固定端口:/etc/sysconfig/yppasswdd
(在文件最後追加)
YPPASSWDD_ARGS="--port 1012"

設置主機名(重啓後無效):
hostname robocup3dfa
設置主機名(重啓後有效):/etc/hostname
(在文件最後追加)
robocup3dfa

開啓ypserv和yppasswd服務:
systemctl enable ypserv
systemctl start ypserv
systemctl enable yppasswdd
systemctl start yppasswdd

初始NIS數據庫:
/usr/lib64/yp/ypinit -m
(以後會彈出確認相關信息,基本都是OK,第一個確認是按「ctrl+D", 第二個確認是輸入「y"回車,本身仔細閱讀看一下吧

 

 

如今咱們要暫且回到ubuntu,去安裝NIS客戶端(每臺Ubuntu都要安裝):

 

安裝NIS客戶端程序(注意,安裝過程當中不要走神,中途會彈出窗口讓你設置NIS服務器域名,固然,咱們得輸入:robocup3dfa
(同時這也是全部Ubuntu上最後要安裝的軟件,安裝完成後請按3.網絡拓撲結構與IP配置」中「(2)用於代碼上傳和代碼測試階段」的方式來設置Ubuntu們的IP:
aptitude -y install nis

設置NIS客戶端配置文件,指定NIS服務器IP: /etc/yp.conf
(在文件最後追加)
ypserver 192.168.1.19

設置NIS客戶端配置文件,給本機加入NIS服務切換規則:
(就修改紅字標註的那些行,其實這幾行中"nis"的前後順序是有蹊蹺的,關於「hosts「那行,你若把「nis"放句尾也行,只是在你用sudo,或切換用戶,或ping 主機名時……本身能夠試試,反正客戶端有好幾臺)
passwd: compat nis
group: compat nis
shadow: compat nis
hosts: files nis mdns4_minimal [NOTFOUND=return] dns mdns4

測試NIS客戶端:
yptest
成功的話,會產生以下輸出:
Test 1: domainname
Configured domainname is "robocup3dfa"

Test 2: ypbind
Used NIS server: robocup3dfa

Test 3: yp_match
WARNING: No such key in map (Map passwd.byname, key nobody)
....(中間省略).... Test 6: yp_master robocup3dfa ....(中間省略).... Test 8: yp_maplist passwd.byname protocols.byname hosts.byaddr hosts.byname ....(中間省略).... Test 9: yp_all ccwss1 robocup3d:$1$U9Gccb60$K5lDQ.mGBw9x4oNEkM0Lz/:2001:2000::/robocup3D/ccwss1:/bin/bash ....(中間省略).... 1 tests failed

總過有9個」test"有一個failed,不過沒有關係,NIS照樣能夠用。

 

給每一個用戶統一設置掛載點:

建立掛載的入口目錄(全都在/robocup3D/***): ./mkdir_home.sh 掛載(每次開機重啓時,都得要執行): ./mount_nfs.sh(注意事項,參見「其餘重要信息」)

 

 

咱們在Ubuntu上來測試NIS吧,

a,用戶登陸測試:
在clienta1電腦上(密碼在以前用UsersInit.sh生成的usersPasswd.txt文件裏找):
su - ccwss1
密碼:

b,修改密碼測試:
yppasswd
舊密碼:
新密碼:
再輸一次:

 

OK啦!此次真的是所有OK了,但是,但是……做死的血液又在沸騰了.

若是有人不當心傳錯文件了,或有故意惡搞,塞個幾十G的文件過來,那還不得把服務器撐爆嗎?

因此,我就給每一個用戶添加了硬盤容量使用限制,主要用的軟件叫quota,不須要安裝,fedora自帶,那麼咱們就愉快的開始吧!

(事實證實quota就是多餘的,你們都是中華民族的好兒女,沒人惡搞。最最重要的一點就是:那破無線路由器,唉……,組織方給的全部硬件都很到位,就這無線路由器最煞風景了,聽說是那天臨時從一個辦公室搶來的。)

 

回到robocup3dfa上

讓根目錄支持quota:
mount -o remount,usrquota,grpquota /

讓根目錄長期支持quota,修改/etc/fstab
將這行:
UUID=5ab7082c-41f4-482e-8a0c-fd90d92884b6   /               ext4    errors=remount-ro  0       1
改成(你的電腦上應該會有些不同,可是隻要記住是在倒數第三項上追加紅色文字就好了):
UUID=5ab7082c-41f4-482e-8a0c-fd90d92884b6   /               ext4    errors=remount-ro,usrquota,grpquota   0       1

開啓quota:
quotaoff -vaug
quotacheck -avugm
quotaon -vaug

給每一個用戶設置500M容量限制(應該沒有500M,大概480M多一點的樣子):
./quota.sh

 

好了,你能夠到clienta1上測試一下:

切換ccwss1用戶:
su - ccsww1

建立一個400M的文件並查看:
dd if=/dev/zero of=bigfile1 bs=1M count=400
ls -lh

再建立一個400M的文件並查看(這時你看到bigfile2應該只有180幾M)
dd if=/dev/zero of=bigfile1 bs=1M count=400
ls -lh

測試完成後,就把兩個bigfile刪了吧。

 

6. 測試與使用:

首先,我們確認一下,咱們已經將每臺機器的IP都設置成了192.168.2.xxx了,如今咱們再接上無線路由器(AP),並設置其IP。

請按3. 網絡拓撲結構與IP配置」中「(2)用於代碼上傳和代碼測試階段」的方式來設置IP和網線接法。

複製一份先前編譯好的sim3dStart-server到servera上(還記得這個嗎)

servera    運行    sim3dStart-server
monitor    運行    roboviz
此時roboviz會是一片漆黑;

接下來,將要模擬各個隊伍的代碼上傳與測試(如下操做均在筆記本上完成):

首先連上無線路由器。

(這時咱們沒必要要用root身份)
遠程上傳可執行文件:
scp -rp myBinary ccwss1@192.168.2.13:/robocup3D/ccwss1

遠程登陸ccwss1:
ssh ccwss1@192.168.2.13
(此時的遠程登陸機爲clienta1,登陸後,你會發現用scp傳上來的文件)

遠程啓動rcssserver3d:
restartSim3d
這時roboviz就會顯示球場了;

運行球隊代碼:
./start.sh 192.168.2.12
若是clienta1上運行了proxy,則只需運行(proxy的更多說明見「其餘重要信息」):
./start.sh

./start.sh 127.0.0.1


這時你能夠再用另外一個用戶登陸,上傳並運行代碼來進行比賽測試(注意有一些不一樣):
遠程上傳代碼:
scp -rp myBinary ccwss2@192.168.2.14:/robocup3D/ccwss2

遠程登陸ccwss2
ssh ccwss2@192.168.2.14
(此時的遠程登陸機爲clienta2,登陸後,你會發現用scp傳上來的文件

運行球隊代碼:
./start.sh 192.168.2.12
若是clienta2上運行了proxy,則只需運行(proxy的更多說明見「其餘重要信息」):
./start.sh

./start.sh 127.0.0.1

若是其餘球隊要再測試的話,只要運行restartSim3d就能重啓rcssserver3d了。

 

最後衝刺了!立刻就能夠完成啦!

不作特別說明,如下咱們均已root身份執行命令!!!

接下來咱們要操做monitora這臺電腦

各臺Ubuntu的root密碼以前設了沒?就在「4. 軟件安裝與系統配置」一開始的地方

設置免密碼登陸:
ssh-keygen
而後一路回車;
ssh-copy-id root@clienta1
輸入clienta1的root密碼
ssh-copy-id root@clienta2
輸入clienta2的root密碼
ssh-copy-id root@servera
輸入servera的root密碼

此時你在monitora上登陸任意上面任意一臺電腦都不用密碼了,能夠像下面這樣試試:
ssh root@clienta1

 

配置rclm2:

修改/usr/local/share/types/3Dspark/config文件(具體路徑可能不同,主要是types/3Dspark/config這個文件):    
NET_PREFIX=10.10.0               ==>>    NET_PREFIX=192.168.2
SERVER=${NET_PREFIX}.1           ==>>    SERVER=${NET_PREFIX}.2    
CLIENT1=root@${NET_PREFIX}.2     ==>>    CLIENT1=root@${NET_PREFIX}.3
CLIENT2=root@${NET_PREFIX}.3     ==>>    CLIENT2=root@${NET_PREFIX}.4
這時候你應該能夠猜出我上面在幹什麼吧;

初始化rclm2:
rclm2 groupA
cd groupA
./script/init 3Dspark

建立文件teamsOfA,列出小組中各參賽隊用戶主目錄(如下以今年的A組爲例):
/robocup3D/AHJZU_3D
/robocup3D/Apollo3D
/robocup3D/Dreamwing3D
/robocup3D/Icarus
/robocup3D/Kylinsky3D
/robocup3D/Miracle3D


編制A組賽程安排:
./script/schedule/init teamsOfA
這時會產生一個文件var/schedule。打開看一下,差很少是這個樣子:
/robocup3D/AHJZU_3D
vs /robocup3D/Apollo3D
/robocup3D/Apollo3D
vs /robocup3D/Dreamwing3D
***************如下省略*********

若是用rclm2來管理比賽的話,比賽場次順序就是按照以上那個文件來的。

讓rclm2啓用roboviz,修改script/game/start文件:

pushd ~/Desktop/roboviz/
改成你本身的roboviz路徑,我修改的路徑爲:
pushd /home/monitora/Desktop/roboviz/bin/linux-amd64/

終於到最後一步了!當每一個球隊都上傳了代碼後,運行如下命令,正式比賽:
./script/start

 

 

其餘重要信息:

1. 關於restartSim3d:

(1)一個bug:

sim3dStart-server有一個bug,就是當在servera上同時啓動sim3dStart-server和rcssserver3d時,用於遠程重啓rcssserver3d的restartSim3d會運行失敗。

(2)restartSim3d腳本:

restartSim3d是個shell腳本,就一行命令:

sim3dStart-client servera

猜猜看,若是換成在B組,這個命令會產生什麼結果嗎?

若是咱們要用在B組,咱們應當把servera改爲serverb(或者是IP:192.168.2.22也行)

 

2. UsersInit.sh的用法:

像這樣運行程序:

./UsersInit.sh

程序會建立teams裏的全部用戶,並隨機產生6位密碼,而後保存至usersPasswd.txt文件裏。這裏有個問題。

我經常想將用戶和密碼信息提早1到2個星期通知個參賽隊,可是要知道我這時尚未搭建環境呢!

到了在會場再次運行UsersInit.sh時,它又會建立新的密碼。這可麻煩了。那麼提早告知你們用戶名與密碼有什麼用呢?

鑑於這點,這個腳本還有個用法

./UsersInit.sh oldUsersPasswd.txt

其中oldUsersPasswd.txt能夠是你以前運行./UsersInit.sh時獲得的usersPasswd.txt(而後把它更名爲oldUsersPasswd.txt以示區別),

這種用法,程序會根據oldUsersPasswd.txt裏的用戶名與對應的密碼來進行設置,也就是說舊密碼有效。

 

3. 電腦重啓注意事項:

電腦重啓的順序很重要,不然……試試看吧,試過以後印象更深入。

先打開:fedora;

而且要確認:網絡配置是否爲192.168.2.19

而且要打開防火牆:./iptables_rule.sh

此時才能打開Ubuntu,並且還要確實IP配置和執行掛載命令 ./mount_nfs.sh

 

4. proxy:

爲了和國際接軌,這個是今年國賽新加的東西,須要運行在clienta1和clienta2上,按正統規則來講,這個東西是屬於標準的,但它與今年13支參賽隊中的6支都不兼容(具體表現爲全部的球員都不能正常走路),因此我也給取消不用了,不過既然是標準,我就講講用法吧。

(操做servera電腦)
切換root身份:
su - 設置rcssserver3d的Agent的端口,從3100改成3110: /usr/local/share/simspark/spark.rb(路徑可能不一樣) $agentPort = 3100 ==>> $agentPort = 3110 刪除臨時配置文件: rm -rf ~/.simspark

(在clienta1和clienta2電腦上操做)
解壓並運行proxy:
tar -axf proxy.tar.gz
./startProxy.sh 192.168.2.12 3110 3100

此時,原本運行球隊的命令:
./start.sh 192.168.2.12
就能夠改成:
./start.sh

./start.sh 127.0.0.l

若是要用rclm2的話,還要修改rclm2的相關配置文件內容(見下)

 

5. rclm2的使用說明:

rclm2主要作如下5件事兒:

(1)複製並修改rcssserver3d的配置文件到servera的root主目錄裏;

(2)編制單循環賽的比賽場次安排;

(3)按順序啓動rcssserver3d, roboviz, 球隊1的代碼, 球隊2的代碼

(4)rcssserver3d崩潰時,記錄並重置比賽時間和比分;

(5)壓縮log文件;

第(1)件事兒挺重要的,它會在./script/start第一次運行後完成,無論你用不用rclm2,最好仍是運行一次這個程序。

第(2)件事兒也最好讓rclm2幫你作,畢竟它編制出的比賽場次比較合理。

第(3)件事兒嘛,是正式比賽時重複最多的步驟,其實當你習慣了用ssh手動啓動時,不用rclm2也無所謂。

第(4)件事兒也挺重要的,這主要是由於咱們的rcssserver3d常常會崩潰(crash)(參加過比賽的老隊員通常知道),好比在比賽到了153秒的時候,roboviz會忽然顯示

      "disconnected",因而比賽要重開,那麼rclm2會自動恢復比賽時間和比分。若是你不想用rclm2的話,手動也能完成這個工做:

      

 

打開root主目錄下的naosoccersim.rb文件(以前在./script/start後產生的文件),記得還得是root身份哦:
cd vim naosoccersim.rb

其中大約在118,119行的樣子,
是這樣兩行:
obj.setTime(0)
obj.setScores(0,0)
改成:
obj.setTime(153)
obj.setScores(2,1)
重開rcssserver3d和roboviz,這時時間是從153開始了,比分一開始就是2:1.

如何找到rcssservver3d崩潰時的時間?(最好先看看「6. 不用rclm2,而用手動啓動rcssserver3d的注意事項」)
root主目錄裏有個sparkmonitor的log文件,用vim打開它,並跳轉到最後一行,行首就標註有time,那個就是崩潰時的時間。
至於比分嘛,這個你們都會記得的。

 

 

第(5)件事兒基本沒人關注,它會把每次比賽的log文件從servera裏傳到monitora裏,並壓縮保存進groupA/archives文件夾裏。若是要把restore.py整合進rclm2裏面,這個仍是有用的。

 

6. 不用rclm2,而用手動啓動比賽時的注意事項:

用rclm2在./script/start第一次配置以後,若要改用手動啓動rcssseerver3d和球隊代碼的話,

在啓動rcssserver3d時必定要以root身份,而且得在root主目錄下運行rcssserver3d命令,不然以前的用rclm2作的相關配置就會失效,總重要的是不會產生sparkmonitor這個log文件。

 

7. restore腳本:

「都是rcssserver3d崩潰惹的禍「,若是就在你快要進球時,rcssserver3d崩潰了怎麼辦?之前的國賽,只能自認倒黴。如今,這個腳本能夠回覆rcssserver3d崩潰前的樣子,

但要用sparkmonitor這個log文件。

在servera機器上:

 

在rcssserver3d崩潰後作的第一件事,保存sparkmonitor:
cp sparkmonitor sp.backup

重開比賽,並按以前的左右場順序上雙方球員,待全部球員準備完畢後,恢復狀態:
./restore sp.backup

 

你能夠本身測試一下,先讓比賽比到一半,而後殺掉rcssserver3d,再按以上步驟恢復球場狀態。

 

這個說的是手動的狀況,若是要用rclm2,你得要修改script/game/start這個腳本,今年A組沒用rclm2,B組用了,至於怎麼修改的,我忘備份了,很差意思…… 

 

若是你使用了proxy,那麼還得在多修改一些地方:

 

修改script/game/start,大概在第57和第62行:
將
ssh ${CLIENT1} "su - $NAME1 -c './start.sh $SERVER &> log/start.log'" &
ssh ${CLIENT2} "su - $NAME2 -c './start.sh $SERVER &> log/start.log'" &
修改成:
ssh ${CLIENT1} "su - $NAME1 -c './start.sh 127.0.0.1 &> log/start.log'" &
ssh ${CLIENT2} "su - $NAME2 -c './start.sh 127.0.0.1 &> log/start.log'" &

 

 

 

 

8. mount_nfs.sh使用說明:

這個腳本很短,就13行(註釋就佔了6行),不妨打開看一下。

 

注意這樣一行:
 mount -t nfs robocup3dfa:$HomeDir/$username $HomeDir/$username

你應該能看出來,若是把這個腳本用到B組而不作修改,確定會出問題的(可能到正式比賽時纔會顯現),用到B組時,咱們要修改成:
mount -t nfs robocup3dfb:$HomeDir/$username $HomeDir/$username

 

 

一點其餘建議:

組織一場比賽不但得有TC,還要有OC(OrganizationCommittee)。可國內比賽不分這個,以上是TC份內的事兒,但還有OC的事兒也得你本身來,

什麼「統計比分」啦、「發佈通知」啦、「聯繫各方」啦,「編寫規則」啦,「打印獎狀」啦……總之有你煩的了!必定不要以爲費時間,耐下心思,簡單培訓幾個會場的志願者(若是沒有志願者………………),都是些很簡單的活兒,雖然一開始可能有點不熟悉,不過很快就能夠上手的。

相關文章
相關標籤/搜索