码迷,mamicode.com
首页 > 其他好文 > 详细

RoboCup仿真3D TC笔记(2014年合肥中国公开赛 仿真3D比赛环境搭建)

时间:2014-10-27 12:19:58      阅读:706      评论:0      收藏:0      [点我收藏+]

标签:des   style   blog   http   color   io   os   ar   使用   

所谓“TC“,就是Technology Committee(技术委员),讲的好像很厉害,实则就一“网管”。

TC的技术含量其实不高,但是涉及的东西很多很杂,网上零零散散的都有,在这里我想总的整理一下,算是栽颗小树吧…

注:如果你只想自己装个环境写代码的话,请不要看以下写的,真的是无比之烦,建议你看官网的这个或其他博客:

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

 

接下来,我将按以下流程讲解一下RoboCup仿真3D比赛环境的搭建方法:

1. 硬件要求:

(1)电脑硬件要求;

(2)交换机硬件要求;

(3)网线硬件要求;

2. 各个电脑任务分配;

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上了。

bubuko.com,布布扣

 

(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"也可以咯。

如果你对网络不熟悉的话,这句话的进一步理解还得到实践中去体会。)

bubuko.com,布布扣

 

(3)用于正式比赛:

这就让A、B组的机器独立了,不会相互干扰了。

bubuko.com,布布扣

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的事儿也得你自己来,

什么“统计比分”啦、“发布通知”啦、“联系各方”啦,“编写规则”啦,“打印奖状”啦……总之有你烦的了!一定不要觉得费时间,耐下心思,简单培训几个会场的志愿者(如果没有志愿者………………),都是些很简单的活儿,虽然一开始可能有点不熟悉,不过很快就可以上手的。

 

 

    

 

RoboCup仿真3D TC笔记(2014年合肥中国公开赛 仿真3D比赛环境搭建)

标签:des   style   blog   http   color   io   os   ar   使用   

原文地址:http://www.cnblogs.com/ansersion/p/4050308.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!