目录
最近学校在开展RoboCup仿真救援项目的相关内容,发现这个项目入手环境配置的流程比较复杂,所以这边进行一个记录和整合,也给后来人一些经验。
比赛官网
代码资源下载
或者可以下载主页资源RoboCup代码
下面介绍双系统的安装、JAVA环境配置、系统运行的指令和预计算的处理指令,大多数内容来源于比赛官方github。
一、双系统安装
项目需要在linux环境下运行,最好安装双系统或者虚拟机,这里主要介绍双系统安装linux的方法。
1.1下载Ubuntu
下载Ubuntu到官方网站下载一般速度都比较慢,可以选择清华大学开源软件镜像站作为替代
在网站往下面滑动找到最近的发行版本下载即可,可以尝试20.04或者18.04版本。
1.2创建空磁盘分区
按住Win + X,选择“磁盘管理”或者右键此电脑也有磁盘管理的选项
选择剩余空间较大的可分配磁盘,右键并选择“压缩卷”,这里选择压缩E盘50~100G左右(一般可以到60左右,可以尽量多)的空间
点击“压缩”之后,E盘后部出现黑色的50~100G“未分配空间”
1.3制作启动盘
备份待写入的U盘并将其插入电脑(一定要备份,不然里面的内容会被清空)
到rufus官网下载(rufus)启动盘的制作工具rufus,安装并打开
对于不同目标类型系统来说,它选择的分区类型不一样,这里可以到互联网上查询具体方法。
在引导类型选择右面点击那个选择,找到刚刚下载好的Linux系统的镜像文件,将该镜像文件刻录到U盘中(卷标选择U盘),点击开始就会自动的刻录。刻录的过程中会擦除U盘中的文件,所以如果有重要资料请一定要备份。
1.4安装Linux系统
重启 电脑,进入系统bios后设置优先u盘启动,设置后电脑自动重启并进入ubuntu安装界面。
这里点击“Install Ubuntu”,是安装系统;第一个是试用系统但是并不会安装。
1.4.1开始安装
接下载就按照流程安装系统,语言可以选择自己需要的语言
大多数内容只需要顺着点就可以了。
注意到安装类型这里,千万不要点击第二个,不然你的WINDOWS系统就要没了。我们这里点击“其他选项”,可以自己配置分区等内容。
1.4.2系统分区
安装系统的最重要环节就是系统分区
单击“创建新分区表",点击的“+”创建4个主要的基础分区(这里之前未分配的50G就是给ubuntu系统的60G),按以下参数设置4个主要的基础分区:
20~25G 主分区 空间起始位置 Ext4日志文件系统 / (建议保证20G以上的内存)
4G 逻辑分区 空间起始位置 交换空间 /swap
200MB 逻辑分区 空间起始位置 Ext4日志文件系统 /boot
剩余的空间 逻辑分区 空间起始位置 Ext4日志文件系统 /home
各分区功能如下:
主分区:安装系统和软件,需要较大内存;
/home逻辑分区:相当于windows“我的文档”;
swap逻辑分区:充当虚拟内存,大小等于内存大小;
(当然这里还可创建自己的其他分区如/123分区,只要设置为逻辑分区、空间起始位置、Ext4日志文件系统即可,新手强烈建议忽略此步,按上面设置即可)
安装启动引导设备的参数选择:与/boot所在的编号一致。设置好后安装即可,之后的选项(所在地点、键盘布局、电脑名称、开机密码等)正常进行直到安装完毕。
如果重启电脑,打开后是下面这样,双系统已经安装成功。如果安装失败,可以自行网上查询
注意:部分电脑(例如thinkbook)双系统安装后可能由于Ubuntu系统缺少网卡驱动导致无法联网,可以蓝牙共享网络后上网搜索解决办法。
二、JAVA环境配置
比赛要用java语言编程,所以需要在Linux里面下载并且安装java。
- 先更新一下软件包
sudo apt update
官方的readme文档中可以看到,它支持的是JDK 17,所以也比较建议用jdk 17。
可以用下面的指令查看一下apt都支持哪些17的JDK包。
apt-cache search openjdk-17
可以看到支持的jdk包,这里比较建议安装openjdk-17-jdk。
-
openjdk-17-dbg:这个包包含了OpenJDK 17的调试符号。调试符号是编译程序时生成的信息,它允许调试器(如GDB)将内存地址转换为函数名、变量名等可读形式,从而更容易地诊断和修复程序中的错误。如果你需要调试Java应用程序或OpenJDK本身,这个包将非常有用。
-
openjdk-17-demo:这个包包含了OpenJDK 17的演示和示例程序。这些示例可以帮助你了解Java的特定功能或API如何使用,是学习Java和开发Java应用程序的有用资源。
-
openjdk-17-doc:这个包提供了OpenJDK 17的文档,包括Java Development Kit (JDK) 的开发文档。这些文档是深入理解Java平台、JDK类库、JVM内部工作原理等的宝贵资源。
-
openjdk-17-jdk:这是OpenJDK 17的完整开发工具包(JDK),包含了编译、运行和调试Java应用程序所需的所有工具和库。它还包括了
openjdk-17-jre
中的所有内容。 -
openjdk-17-jdk-headless:这个包是OpenJDK 17的JDK的“无头”版本,它不包含图形用户界面的库和工具,如AWT和Swing。这通常用于服务器环境或需要最小安装的嵌入式系统。
-
openjdk-17-jre:这是OpenJDK 17的Java运行时环境(JRE),它包含了运行Java应用程序所需的所有库和JVM(Java虚拟机),但不包含开发工具(如编译器和调试器)。这个包足够让Java应用程序在安装了它的系统上运行。
-
openjdk-17-jre-headless:这是OpenJDK 17的JRE的“无头”版本,类似于
openjdk-17-jdk-headless
,但它不包含开发工具和图形用户界面库。它通常用于需要Java运行时的服务器或嵌入式系统。 -
openjdk-17-jre-zero:这个包提供了一个替代的JVM实现,称为Zero VM。Zero VM是一种轻量级的JVM实现,适用于资源受限的环境。然而,它可能不支持所有Java特性,并且性能可能不如HotSpot VM。
-
openjdk-17-source:这个包包含了OpenJDK 17的源代码文件。这些源代码是理解Java平台内部工作原理、为OpenJDK贡献代码或学习Java编程语言本身的有用资源。
输入命令即可
sudo apt install openjdk-17-jdk
安装之后可以在终端输入指令验证是否安装成功
java -version
如果输出的是java版本,这就意味着安装成功。
三、项目运行
3.1准备代码
上面已经将代码运行成功,我们可以开始从U盘拷贝RoboCup代码进来。或者也可以在终端用git下载代码。
如果没有git可以在终端中输入指令安装
sudo apt-get install git
用git下载代码的方法如下
git clone https://github.com/roborescue/adf-sample-agent-java.git
git clone git@github.com:roborescue/rcrs-server.git
分别下载的是客户端和服务器两个工程项目。
3.2编译项目
当代码下载好后,在两个工程所在的文件夹里面分别打开终端
3.2.1服务器端编译
在服务器端的终端依次输入指令
cd rcrs-server
./gradlew completeBuild
先进入到工程的文件夹里面,然后全编译
这里需要工具gradle,得安装一下,可以用指令
sudo apt install gradle
3.2.2客户端编译
在客户端的终端依次输入指令
cd adf-sample-agent-java
./gradlew clean
./gradlew build
打开工程文件并编译。
注:代码编译过之后,如果没有做修改,后面的运行可以不用再重新编译。
编译过后,都会有一个绿色的successful 。
3.3运行项目
服务器端依次输入指令
cd scripts
./start.sh -m ../maps/test/map -c ../maps/test/config
上面test是测试地图,智能体数量并不多,可以修改为kobe、berlin等地图,这个可以到文件中查看。
这时服务器已经准备好了,如下图。同时也会打开图形化界面
服务端准备好后,在刚刚已经打开的客户端的终端中输入指令
./launch.sh
可以看到对于lanuch脚本,我们可以进行很多操作
我们选择运行,即输入下面的这个指令
./launch.sh -all
就会启动整个项目,等待项目中所有智能体的连接。
3.4结果
非预计算模式下(NON_PRECOMPUTE),进度条只能到75%,当出现Done connecting to server,就意味着所有的智能体都挂载到服务端了。
这是整个项目都已经准备就绪,点击GUI界面的RUN就可以看到智能体开始运动,跑图开始
在地图上也出现了很多黑色的障碍。
四、预计算模式启动
在比赛的时候,官方一般都要求以预计算模式运行,如果项目的代码写的没有太大的问题,都可以以预计算方式启动。预计算可以有效地提高代码效率并且加快运行速度。这边再介绍一下预计算的指令
4.1编译
第一步也是编译,分别对服务器和客户端进行编译
服务器编译的指令依次为
./gradlew clean
./gradlew completeBuild
客户端编译的指令依次为
./gralew clean
./graldew build
编译成功后,会出现successful。
4.2预计算指令
第二步进行预计算
在命令⾏中切换到rcrs-server-master⽬录下,依次输入下面的指令((PS:可以⽤tab键提示路径,可以输⼊ls命令查看当前⽬录)
cd scripts
bash start-precompute.sh -m ../maps/berlin/map -c ../maps/berlin/config
服务端此时会启动。
切换到客户端的目录下,输⼊如下命令启动客户端
bash launch.sh -t 1,0,1,0,1,0 -h localhost -pre 1
当运行成功后,会各有一个智能体成功挂在到服务器上,同时出现绿色的successful的字样。
这时我们切换到服务端的终端,ctrl+c,终止运行,输⼊bash ./kill.sh 结束掉服务端进程。
之后输⼊如下命令,进⾏服务端计算
bash start-comprun.sh -m ../maps/berlin/map -c ../maps/berlin/config/
要注意和前面的地图是对应的。运行之后,服务端会进入到一个等待的状态。
4.3运行程序
第三步运行代码
我们再切换回客户端的命令行
输⼊命令
bash ./launch.sh -all
出现绿色的successful,说明预计算成功。⾄此已经完成全部流程,接下来等待计算完成即可,此后会⾃动弹出图形化界⾯,⾃动开始跑图,不需要再做⼈⼯⼲预。
以上就是在预计算模式下运行该项目。