主页 > 互联网  > 

hatitat-sim的agent.py各部分组成

hatitat-sim的agent.py各部分组成
1.导入依赖 from typing import Any, Dict, List, Optional, Union import attr import magnum as mn import numpy as np import quaternion as qt

attr:用于简化类定义,通过自动生成属性和初始化代码来提高代码的简洁性。 magnum:3D图形库,用于操作3D空间中的场景图形。 numpy:用于数值计算,尤其是处理矩阵和向量。 quaternion:用于处理四元数,四元数常用于表示3D旋转。 habitat_sim:环境模拟库,提供3D场景和智能体模拟。

2.ActionSpac类 @attr.s(auto_attribs=True) class ActionSpec: name: str actuation: Optional[ActuationSpec] = None

name: 行动名称(如“前进”、“旋转”等)。 actuation: 该行动的参数(例如前进的距离或旋转的角度)

3. 六自由度位置 (SixDOFPose)

表示一个三维空间中的位置和旋转。

@attr.s(auto_attribs=True, slots=True) class SixDOFPose: position: np.ndarray = attr.ib(factory=_triple_zero, validator=all_is_finite) rotation: Union[qt.quaternion, List] = attr.ib(factory=_default_quaternion, validator=is_unit_length)

position: 物体的3D位置。 rotation: 物体的旋转,使用四元数表示。

4. AgentState 类

表示智能体的状态,包括位置、旋转和传感器状态。

@attr.s(auto_attribs=True, slots=True) class AgentState: position: np.ndarray = attr.ib(factory=_triple_zero, validator=all_is_finite) rotation: Union[qt.quaternion, List, np.ndarray] = attr.ib(factory=_default_quaternion, validator=is_unit_length) sensor_states: Dict[str, SixDOFPose] = attr.ib(factory=dict, validator=...)

position: 智能体的位置。 rotation: 智能体的旋转。 sensor_states: 智能体的传感器状态,使用传感器的 SixDOFPose 来表示。

5.AgentConfiguration 类

定义了智能体的配置,包括大小、传感器和动作空间。

@attr.s(auto_attribs=True, slots=True) class AgentConfiguration: height: float = 1.5 radius: float = 0.1 sensor_specifications: List[hsim.SensorSpec] = attr.Factory(list) action_space: Dict[Any, ActionSpec] = attr.Factory(_default_action_space) body_type: str = "cylinder"

height: 智能体的高度。 radius: 智能体的半径。 sensor_specifications: 智能体使用的传感器的配置列表。 action_space: 定义智能体可以执行的行动。 body_type: 智能体的形状类型。

6. Agent 类

智能体的核心类,管理智能体的位置、旋转、传感器、动作等。

@attr.s(init=False, auto_attribs=True) class Agent: agent_config: AgentConfiguration _sensors: SensorSuite controls: ObjectControls body: mn.scenegraph.AbstractFeature3D

agent_config: 智能体的配置。 _sensors: 智能体的传感器。 controls: 智能体的控制接口。 body: 智能体在场景中的物体。

7.init 方法

初始化智能体的构造函数,接收场景节点、配置、传感器和控制参数。

def __init__( self, scene_node: hsim.SceneNode, agent_config: Optional[AgentConfiguration] = None, _sensors: Optional[SensorSuite] = None, controls: Optional[ObjectControls] = None, ) -> None: 8.reconfigure 方法

重新配置智能体的属性,包括配置更新和传感器重置。

def reconfigure( self, agent_config: AgentConfiguration, reconfigure_sensors: bool = True ) -> None: 9.act 方法

执行智能体的行动。

def act(self, action_id: Any) -> bool: action_id: 选择的行动ID,通过 agent_config.action_space 获取实际的行动。 did_collide: 返回是否发生了碰撞。 10.get_state 和 set_state 方法

分别用于获取和设置智能体的状态。

def get_state(self) -> AgentState: 获取智能体的当前位置、旋转和传感器状态。

def set_state( self, state: AgentState, reset_sensors: bool = True, infer_sensor_states: bool = True, is_initial: bool = False, ) -> None: 设置智能体的状态,包括位置、旋转,并可以选择重置传感器。

scene_node 属性

返回智能体的场景节点。

@property def scene_node(self) -> SceneNode:

state 属性

简化版的 get_state 和 set_state 方法,作为智能体状态的快捷访问方式。

@property def state(self): return self.get_state() @state.setter def state(self, new_state: AgentState): self.set_state(new_state, reset_sensors=True, infer_sensor_states=True, is_initial=False) close 方法

关闭智能体,清理传感器资源。

def close(self) -> None: self._sensors = None 代码中 attr.s 的作用

在 agent.py 代码中,多个类使用了 @attr.s(auto_attribs=True, slots=True)

@attr.s(auto_attribs=True, slots=True) auto_attribs=True:让 attrs 直接从类型注解(如 position: np.ndarray)推导属性,并自动生成 __init__ 方法。 slots=True:使用 __slots__ 机制来减少内存开销,提高性能。 position: np.ndarray = attr.ib(factory=_triple_zero, validator=all_is_finite) attr.ib(...) 定义类的属性: factory=_triple_zero:默认值是 np.zeros(3) validator=all_is_finite:确保 position 里的值都是有限数值(不是 inf 或 NaN) 总结

这个文件定义了一个用于模拟环境中智能体的类。智能体有多个传感器和动作,可以获取和设置其状态。它使用了 habitat_sim 提供的功能来控制智能体的行为,如移动、旋转和处理传感器数据。通过这个类,开发者可以在虚拟环境中创建、控制和监控智能体的行为。

标签:

hatitat-sim的agent.py各部分组成由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“hatitat-sim的agent.py各部分组成