# rangelrcrs **Repository Path**: mo_xuan66/rangelrcrs ## Basic Information - **Project Name**: rangelrcrs - **Description**: No description available - **Primary Language**: Java - **License**: BSD-3-Clause - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2022-02-22 - **Last Updated**: 2022-03-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Rangel Aust ## 1.Project Introduction and Overview 项目整体托管在gitee 可以自行选择clone和下载,要求前期必须掌握git的简单和基本操作。(不能出现版本混乱和代码泄露等) 同时转载博客对整体项目有一个简单介绍: https://blog.csdn.net/hutaizhang/article/details/108741338 #### 项目要求 - 环境:JDK11及以上都可,需要有server端 - 系统:Windows和Ubuntu都可以跑项目,但是Windows的Debug功能不完全,无法通过内核视图看修改的效果。Ubuntu可以完美运行 - 配置:内存8G以上,最好有idea ## 2.Project Structure Windows环境下的Idea项目结构中的library和config等文件夹较为次要,对策略等代码的阅读和书写无太大作用。 clean.sh和compile.sh为预计算,测试,编译等shell脚本文件,只需阅读。 adf.sample为大赛官方提供的平台和框架,是一个简单的sample可行实例,但是其中的策略和算法很少。(我们需要在其中添加自己的算法策略和思想)。 Rangel为队伍代码,其中包括了救护人员(ambulance),消防员(firebridge),警察(policeforce)的分配和action策略,以及中心智能体(centralized,未仔细研究),可以理解为继承sample后的子类。 test_team.module为模块队伍测试模块,其中包括了A*算法和道路,建筑物探测器以及火势预测 下面对Rangel队伍的代码进行剖析: ## 3.Project Operation 目前的项目在Windows和Ubbuntu上均可运行,下面将演示。 ### 3.1服务器编译 ```shell #使用gradlew项目管理器对robocup服务器编译,防止之前编译与自己pc上jdk版本不一致导致的无法运行。 ./gradlew clean #编译服务器,completeBuild选项定义在build.gradle文件中,除此以外还有的选项还有许多,有兴趣可以自己研究 ./gradlew completeBuild ``` 其他一些可用选项,摘自github 1. Map Editor Open a terminal window, navigate to the `rcrs-server` root directory and execute ``` $ ./gradlew gmlEditor --args= ``` where `--args=` is optional. The default map file path is `maps/gml/test/map/map.gml`. 2. cenario Editor Open a terminal window, navigate to the `rcrs-server` root directory and execute ``` $ ./gradlew scenarioEditor --args= ``` where `--args=` is optional. The default scenario path is `maps/gml/test/map`. 3. Random Scenario Open a terminal window, navigate to the `rcrs-server` root directory and execute ``` $ ./gradlew randomScenario --args= ``` where `--args=` is optional. The default map path is `maps/gml/test/map`. 4. Log Viewer Open a terminal window, navigate to the `rcrs-server` root directory and execute ``` $ ./gradlew logViewer --args= ``` where `--args=` is optional. The default log file path is `boot/logs/rescule.log`. ### 3.2预计算服务器启动 robocup rescue的启动脚本都在boot目录下,项目根的grablew只是起到项目管理的作用,不起到项目启动的功能。所以首先要先切到boot目录下 ```shell cd boot # 预计算命令 bash start-precompute.sh -m ../maps/gml/kobe/map/ -c ../maps/gml/kobe/config/ ``` 上面就以打开了kobe地图进行预计算举例。总结进行预计算的命令就是 ```shell bash start-precompute.sh -m ../maps/gml/${地图名}/map/ -c ../ma ps/gml/${地图名}/config/ ``` ![image-20200430205933105](C:\Users\Tsic\AppData\Roaming\Typora\typora-user-images\image-20200430205933105.png) ### 3.3队伍代码预计算连接 上面两步就是运行了服务器预计算,接下来要对队伍代码进行连接,打开一个新终端切换到队伍代码的项目中。 ```shell bash clean.sh bash compile.sh ``` 使用上面命令对队伍代码进行编译。 ```shell bash launch.sh -pre 1 -t 1,0,1,0,1,0 -local&&PID=$$;sleep 120;kill $PID # 使用bash生成一个子shell通过$$获取到其pid,然后延时120秒也就是预计算时长限制的时间后杀死该shell从子shell中退回来。 ``` 使用上面命令进行预计算连接,请不要使用 ```shell ./launch.sh -pre 1 -t 1,0,1,0,1,0 -local&&PID=$$;sleep 120;kill $PID ``` **预计算完成后请关闭服务器** 直接ctrl + c中断程序然后执行关闭脚本 ```shell sh kill.sh ``` 这样预计算就完成了,接下来就是进行连接 ### 3.4连接时服务器启动 与预计算命令相似,请选择与预计算相同的地图,否则预计算会失效。在sever端boot目录下进行。 ```shell bash start-comprun.sh -m ../maps/gml/kobe/map/ -c ../maps/gml/kobe/config/ ``` ### 3.5队伍代码连接 每行后面的(PRECOMPUTED)是经过预计算过后的标识。(NON_PRECOMPUTED)无预计算。在队伍代码中操作。 ```shell bash launch.sh -all ``` ![image-20200430211030823](C:\Users\Tsic\AppData\Roaming\Typora\typora-user-images\image-20200430211030823.png) 就此服务器和队伍代码就全部都启动起来了。 ### 3.6为什么要用框架 因为软件系统发展到今天已经很复杂了,特别是服务器端软件,涉及到的知识,内容,问题太多。在某些方面使用别人成熟的框架,就相当于让别人帮你完成一些基础工作,你只需要集中精力完成系统的业务[逻辑设计](https://baike.baidu.com/item/逻辑设计)。而且框架一般是成熟,稳健的,他可以处理系统很多细节问题,比如,事务处理,安全性,数据流控制等问题。还有框架一般都经过很多人使用,所以结构很好,所以扩展性也很好,而且它是不断升级的,你可以直接享受别人升级代码带来的好处。 框架一般处在低层应用平台(如J2EE)和高层业务逻辑之间的[中间层](https://baike.baidu.com/item/中间层)。 软件为什么要分层? 为了实现“[高内聚](https://baike.baidu.com/item/高内聚)、低耦合”。把问题划分开来各个解决,易于控制,易于延展,易于分配资源…总之好处很多啦。 ### 3.7框架和设计模式 框架、设计模式这两个概念总容易被混淆,其实它们之间还是有区别的。[构件](https://baike.baidu.com/item/构件)通常是代码重用,而设计模式是设计重用,框架则介于两者之间,部分代码重用,部分设计重用,有时分析也可重用。在软件生产中有三种级别的重用:内部重用,即在同一应用中能公共使用的抽象块;代码重用,即将通用模块组合成库或工具集,以便在多个应用和领域都能使用;应用框架的重用,即为专用领域提供通用的或现成的基础结构,以获得最高级别的重用性。 框架与设计模式虽然相似,但却有着根本的不同。设计模式是对在某种环境中反复出现的问题以及解决该问题的方案的描述,它比框架更抽象;框架可以用代码表示,也能直接执行或复用,而对模式而言只有实例才能用代码表示;设计模式是比框架更小的元素,一个框架中往往含有一个或多个设计模式,框架总是针对某一特定应用领域,但同一模式却可适用于各种应用。可以说,框架是软件,而设计模式是软件的知识。 ### ADF框架的基本构成 adf框架代码adf-core.jar(所在位置项目path/library/rescue/adf-core.jar) 必须实现的有 adf.component.extraction.ExtAction adf.component.module.algorithm.Clustering adf.component.module.algorithm.PathPlanning adf.component.module.complex.TargetDetector adf.component.module.complex.TargetAllocator adf.component.centralized.Com mandPicker adf.component.centralized.CommandExecutor adf-core对整个框架有着详细的约束。有着各种要经行实现的接口,比如pathplannig,聚类,动态聚类,静态聚类,dector,search(dector的一种),allocator等。