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

所谓“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上了。

(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.1mkdir buildcd buildcmake ..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),它的作用估计也能猜出个大概了吧,先装着,回头还要说它:./configuremake 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为测试用户):ccwss1ccwss2AHJZU_3DApollo3DCIT3DDreamwing3DHSHfutEngine3DIcarusKylinsky3DMiracle3DNBUT_kylinSEU_JollyStrive3DYuShan3D

创建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.servicesystemctl 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的IP:
yum 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 :       *:      *:      none192.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 ypservsystemctl start ypservsystemctl enable yppasswddsystemctl 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 nisshadow: compat nishosts: 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 -vaugquotacheck -avugmquotaon -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 [email protected]:/robocup3D/ccwss1

远程登录ccwss1:ssh [email protected](此时的远程登录机为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 [email protected]输入clienta1的root密码
ssh-copy-id [email protected]输入clienta2的root密码
ssh-copy-id [email protected]输入servera的root密码

此时你在monitora上登录任意上面任意一台电脑都不用密码了,可以像下面这样试试:ssh [email protected]

配置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[email protected]${NET_PREFIX}.2     ==>>    [email protected]${NET_PREFIX}.3
CLIENT2[email protected]${NET_PREFIX}.3     ==>>    [email protected]${NET_PREFIX}.4
这时候你应该可以猜出我上面在干什么吧;

初始化rclm2:rclm2 groupAcd 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的事儿也得你自己来,

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

    

时间: 2024-11-25 11:55:29

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

Samsung_tiny4412(笔记)-->linux 3.5,U-Boot,Busybox,SD卡启动环境搭建

/*********************************************************************************** * * Samsung_tiny4412(笔记)-->linux 3.5,U-Boot,Busybox,SD卡启动环境搭建 * * 声明: * 1. 以下所有的shell命令都是在root权限下运行的; * 2. minicom(U-Boot)指的是用minicom连接开发板作为U-Boot的终端; * 3. 文中在需要往文件中

【OSG学习笔记之一:】OSG+VS2010+win7 64位环境搭建

虽然出生的时候,没有说过“Hello World!”,但是自从走上了编程之路,每一次输出“Hello World!”的时候,都觉得好比中了彩票大奖似的: 仔细算算,从2012年暑假到现在,经历了3年半的光阴,这段时间,不仅是知识.阅历.成长获得最大的一段,也是人生的一大转折点.在这期间,得以继续深造学习自己的专业,虽然踏入这行的时候,也是调剂来的,但是我用这3年的时间,恶补自己7年的不足:2015年,发生了三件大事,我毕业了,我工作了,我有女票了(三件事的重要程度递增):吃得苦中苦,方位人上人,

Android学习笔记(三) android studio使用以及SDK环境搭建

环境:Ubuntu 12.04 + android studio 1.0 + jdk jdk使用sun的jdk,网上有较多教程教怎么配置,android studio需从android官网下载,伟大的中国墙的原因,有什么问题大家懂的,sdk下载完后仍然会自动下载部分内容,可选择自己设置镜像下载路径,这样下载速度会相对较快(打开SDKManager,Tools->options,HTTP Proxy Server:mirrors.neusoft.edu.cn,HTTP Proxy Port:80,

ARM2440学习笔记--Linux系统下串口调试和USB调试环境搭建

64位WIN7不能安装DNW,所以在32位LINUX虚拟机操作 linux复制:linux根目录下的文件夹复制粘贴需要权限,所以很多时候复制粘贴不成功 DNW:dnw需要虚拟机在前台时插入USB 串口调试(COM-USB):每次插入USB后 看/dev 里 是ttyusb0 还是 ttyusb1 ,然后通过VI修改.kermrc(命令行: ~/.kermrc) usb调试:虚拟机在前台时插入USB,识别后,在WIN中资源管理器看到识别到未知通用串行设备,在linux中 sudo lsusb可以看

Irrlicht 3D Engine 笔记系列 之 自己定义Animator

作者: i_dovelemon 日期: 2014 / 12 / 17 来源: CSDN 主题: Custom Animator, Referenced count 引言 在昨天的文章<Irrlicht 3D Engine 笔记系列 之 教程4 - Movement>中,博主向大家保证会在今天向大家实际操作怎样扩展Irrlicht引擎的Animator特性.假设读者对Irrlicht的Animator的特性不是非常了解的话,请先了解下前面的那篇文章,本片文章是在上次文章的基础上进行的. Cust

Irrlicht 3D Engine 笔记系列 之 自定义Animator

作者: i_dovelemon 日期: 2014 / 12 / 17 来源: CSDN 主题: Custom Animator, Referenced count 引言 在昨天的文章<Irrlicht 3D Engine 笔记系列 之 教程4 - Movement>中,博主向大家保证会在今天向大家实际操作如何扩展Irrlicht引擎的Animator特性.如果读者对Irrlicht的Animator的特性不是很了解的话,请先了解下前面的那篇文章,本片文章是在上次文章的基础上进行的. Custo

读书笔记2014第4本:程序员修炼之道-从小工到专家(第七、八章)

第七章 在项目开始之前 36 需求之坑不为收集需求,挖掘它们.有一种能深入了解用户需求,却未得到足够利用的技术:成为用户.与用户一同工作,以像用户一样思考.描述需求文档时,要使用项目术语表.用WEB来收集和管理需求. 37 解开不可能解开的谜题遇到不可能解决的问题时,退一步问问自己如下问题:1)有更容易的方法吗?2)你是在设法解决真正的问题,还是被外围的技术问题转移了注意力?3)这件事情为什么是一个问题?4)是什么使它如此难以解决?5)它必须以这种方式完成吗?6)它真的必须完成吗? 38 等你准

黑马程序员学习笔记2014/7/5

观看视频:011_标识符_黑马程序员_Java基础视频.avi Java语言的基础组成 关键字.标识符.注释.常量和变量.运算符.语句.函数.数组.   关键字     标识符 1.在程序中自定义的一些名称 2.由26个英文字母大小写,数字,0-9符号 :_ $ 组成 3.定义合法标识符的规则: a.数字不可以开头 b.不可以使用关键字 4.Java中严格区分大小写 5.注意:在起名的时候尽量起一个有意义的名称       观看视频:012_常量_黑马程序员_Java基础视频 常量与变量 Jav

每日js学习笔记2014.5.4

<script language="javascript">var mystring = "这是第一个正则表达式的例子";var myregex = new RegExp("这是"); //创建正则表达式if (myregex.test(mystring)) //test的功能是查找字符串中是否有匹配项,有则返回true,没有则返回false{ document.write ("找到了指定的模式");}else{