WorldInfo基础作用

WorldInfo类

属性

世界信息类包括世界模型,变化控制结构,周期记录器。又新增了其特有的rollback

    private StandardWorldModel world;
    private ChangeSet changed;
    private int time;
    private Map<EntityID, Map<Integer, Map<String, Object>>> rollback;
    private boolean runRollback;

rollback是一个Map,一个ID对应一个Map<Integer, Map<String, Object>>。Map<Integer, Map<String, Object>>为这个ID变化的历史记录,其中Integer为周期数,对应值Map<String,Object>为改变的属性。作用是记录每个ID在每个周期的属性情况。

方法

以下是wi在外部常用的方法,我们可以通过它得到以下信息:

getEntity(EntityID entityID) 通过传入ID得到标准实体(StandardEntity)类型的实体

getEntitiesOfType(StandardEntityURN urn) 通过传入urn得到这个类型的一个标准实体集合

getEntityIDsOfType(StandardEntityURN urn) 通过传入参数urn得到这个类型的实体ID集合(先调用了getEntitiesOfType() )

getObjectsInRange(EntityID entityID, int range) 传入ID和range(范围),得到一个标准实体集合

getObjectIDsInRange(EntityID entity, int range)传入ID和range,得到一个实体ID集合(先调用了getObjectsInRange())

getObjectsInRectangle(int targetTime, int x1, int y1, int x2, int y2) 传入次数和两个坐标得到这个矩形中的标准实体的集合

getAllEntities() 得到世界中所有的实体,也是以标准实体集合形式返回

getChanged() 得到改变量

getFireBuildings() 得到着火建筑的标准实体集合

getFireBuildingIDs() 得到着火建筑的实体ID集合,同上,先求出标准实体集合,再转换

getNumberOfBuried(@Nonnull Building building) 传入建筑的实体,得到该建筑下掩埋多少人类,包括智能体

getBuriedHumans(@Nonnull Building building) 传参同上,得到该建筑掩埋人类的集合

getBlockades(@Nonnull EntityID entityID) 传入实体ID,如果该ID是区域返回一个障碍物实体集合,否则返回空集合。

getPosition(××) 传入Human得到标准实体型

getDistance(@Nonnull EntityID first, @Nonnull EntityID second) 传入ID计算距离

getDistance(@Nonnull StandardEntity first, @Nonnull StandardEntity second) 传入标准实体计算距离

getBounds() 得到世界的边界

setWorld(@Nonnull StandardWorldModel world) 设置世界模型

setChanged(@Nonnull ChangeSet changed) 设置改变的结构

setTime(int time) 设置时间(周期)

其他方法(该类自己使用的工具方法,外部没有任何使用)

关于createRollback×××,在此详细分析一个

private Blockade createRollbackBlockade(@Nonnull StandardEntity entity, @Nonnull Map<String, Object> cache) {
        Blockade copy = (Blockade)entity.copy();//复制这个障碍物
        Iterator var4 = cache.keySet().iterator();//迭代cache里的StringSet

        while(var4.hasNext()) {//对每一个String进行下列操作
            String urn = (String)var4.next();
            Object value = cache.get(urn);
            StandardPropertyURN type = StandardPropertyURN.fromString(urn);//把String转化为对应的URN
            boolean isDefined = value != null;/根据该key(String)对应的Object是不是空分两种情况进行运算
            switch(type) {//根据不同类型属性不同操作
            case APEXES:
                if (isDefined) {
                    copy.setApexes((int[])((int[])value));
                } else {
                    copy.undefineApexes();
                }
                break;
            case REPAIR_COST:
                if (isDefined) {
                    copy.setRepairCost((Integer)value);
                } else {
                    copy.undefineRepairCost();
                }
                break;
            case X:
                if (isDefined) {
                    copy.setX((Integer)value);
                } else {
                    copy.undefineX();
                }
                break;
            case Y:
                if (isDefined) {
                    copy.setY((Integer)value);
                } else {
                    copy.undefineY();
                }
                break;
            case POSITION:
                if (isDefined) {
                    copy.setPosition((EntityID)value);
                } else {
                    copy.undefinePosition();
                }
            }
        }

        return copy;//返回经过操作后的障碍物
    }
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
2012东大伊朗公开赛代码 package seu.agent; import java.awt.Point; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.EnumSet; import java.util.HashSet; import java.util.List; import java.util.Random; import java.util.Set; import rescuecore2.Constants; import rescuecore2.config.Config; import rescuecore2.messages.Command; import rescuecore2.misc.Pair; import rescuecore2.standard.components.StandardAgent; import rescuecore2.standard.entities.AmbulanceTeam; import rescuecore2.standard.entities.Area; import rescuecore2.standard.entities.Blockade; import rescuecore2.standard.entities.Building; import rescuecore2.standard.entities.Civilian; import rescuecore2.standard.entities.Edge; import rescuecore2.standard.entities.FireBrigade; import rescuecore2.standard.entities.Human; import rescuecore2.standard.entities.PoliceForce; import rescuecore2.standard.entities.Refuge; import rescuecore2.standard.entities.Road; import rescuecore2.standard.entities.StandardEntity; import rescuecore2.standard.entities.StandardEntityConstants.Fieryness; import rescuecore2.standard.entities.StandardEntityURN; import rescuecore2.standard.entities.StandardPropertyURN; import rescuecore2.standard.entities.StandardWorldModel; import rescuecore2.standard.messages.AKSpeak; import rescuecore2.worldmodel.ChangeSet; import rescuecore2.worldmodel.EntityID; import rescuecore2.worldmodel.Property; import seu.agent.BasicTask.BasicTask; import seu.agent.BasicTask.State; import seu.config.Configuration; import seu.message.ImportantMessage; import seu.message.MessageController; import seu.message.MessageMemory; import seu.message.MessagePriority; import seu.message.MessageTranslator; import seu.message.QueueMessage; import seu.message.SmartChoose; import seu.message.Type.AgentIsBuriedMessage; import seu.message.Type.BlankMessage; import seu.message.Type.BuildingIsBurningMessage; import seu.message.Type.BuildingIsExploredMessage; import seu.me
### 回答1: 很高兴回答您的问题。Webots R2022b中可以使用URDF文件。您可以在模拟器的"菜单栏-文件-导入URDF"或者"菜单栏-工具-URDF导入"中导入URDF文件。您也可以使用Webots的API函数来导入URDF文件,具体的API函数可以在Webots的文档中找到。 ### 回答2: 要将URDF文件导入Webots R2022b,可按照以下步骤进行操作: 1. 打开Webots软件并创建一个新的项目。 2. 在项目资源目录中创建一个文件夹,用于存放URDF文件和其他相关资源。 3. 将URDF文件保存到刚刚创建的文件夹中。 4. 在Webots界面的左侧资源视图中,展开"Protos"文件夹。 5. 右键单击"Protos"文件夹,并选择"Open file explorer here"(在此处打开文件资源管理器)。 6. 在资源管理器中,将URDF文件复制到刚刚打开的文件夹中。 7. 返回Webots界面,右键单击"Protos"文件夹,并选择"Reload protos"(重新加载protos)。 8. 在资源视图中,展开"Protos"文件夹,您应该能够看到刚刚复制的URDF文件。 9. 将URDF文件拖放到Webots场景中的适当位置。 10. 在Webots界面的左侧资源视图中,展开"WorldInfo"文件夹,并双击打开"worldinfo.wbt"文件。 11. 在打开的"worldinfo.wbt"文件中,添加一个新的"Include"标签,并指定刚刚添加的URDF文件路径,例如: ```xml <Include file="${ROBOT_ROBOT_NAME}"/> ``` 12. 保存并关闭"worldinfo.wbt"文件。 13. 在Webots界面中,按下"F5"键,或选择"Run" -> "Run simulation"(运行模拟)来加载并模拟URDF文件。 注意:在进行上述操作时,请确保URDF文件的语法正确,并且相关的资源文件(例如模型文件、纹理文件等)也在同一目录下。如果URDF文件存在错误,Webots可能无法正确加载和模拟。 ### 回答3: 要将URDF文件导入Webots R2022b,您可以按照以下步骤进行操作: 1. 打开Webots R2022b软件。 2. 在Webots界面上方的菜单中,点击"File(文件)",然后选择"Import URDF Model(导入URDF模型)"。 3. 在弹出的文件选择对话框中,浏览您的计算机上的文件系统,选择要导入的URDF文件。 4. 点击"Open(打开)"按钮,Webots将读取和解析URDF文件。 5. 系统将在场景中创建对应的URDF模型。 6. 您可以通过单击和拖动场景中的模型来放置它们在所需的位置。 7. 您还可以使用Webots的编辑工具来调整模型的属性,如尺寸、位置、质量等。可以通过右键单击模型并选择"Properties(属性)"来访问这些属性。 8. 如果您希望为模型添加控制器,您可以单击场景中的模型,然后在Webots界面的左侧工具栏中选择所需的控制器。 9. 使用Webots的其他功能和工具来模拟、仿真和测试您的URDF模型。 10.在完成对URDF模型的编辑和设置之后,您可以通过点击Webots界面上方菜单中的"File(文件)",然后选择"Save World As(另存为)",将当前场景保存为一个新的.world文件。 现在,您已经成功地将URDF文件导入到Webots R2022b中,并可以开始使用Webots的各种功能来操作和实验您的模型了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值