机器人系统封装基类
介绍
Robot
是用于封装多控制器与多传感器的机器人类,负责统一调度控制器与传感器的运行,并管理数据的采集、回放与控制接口。该类提供统一的调用接口,支持状态信息获取、数据记录、运动控制与回放等功能。
类定义
class Robot:
成员属性
属性名 | 类型 | 说明 |
---|---|---|
name | str | 机器人名称,默认为 "base_robot" |
controllers | Dict[str, Dict[str, Any]] | 控制器字典,支持多种类型与多个控制器实例 |
sensors | Dict[str, Dict[str, Any]] | 传感器字典,支持多种类型与多个传感器实例 |
condition | Dict[str, Any] | 系统设定参数,如保存路径、频率等 |
collection | CollectAny | 数据采集器,用于缓存并保存数据 |
函数
init(self, start_episode=0)
初始化 Robot
实例。
- 参数:
start_episode
(int): 起始 episode 编号,默认为 0- 返回:无
set_up(self)
机器人初始化接口。该方法需在子类中重写。
- 参数:无
- 返回:无(默认抛出
NotImplementedError
)
set_collect_type(self, INFO_NAMES: Dict[str, Any])
为控制器与传感器设置需要采集的信息字段。
- 参数:
-
INFO_NAMES
(Dict[str, Any]):每个控制器或传感器对应的采集字段名 -
返回:无
get(self) -> List[Dict[str, Any]]
从控制器与传感器中获取当前状态信息。
- 参数:无
- 返回:
List[Dict[str, Any]]
:包含[controller_data, sensor_data]
的列表
collect(self, data: List[Dict[str, Any]])
采集数据并存入缓存。
- 参数:
-
data
(List[Dict[str, Any]]):[controller_data, sensor_data]
数据对 -
返回:无
finish(self)
将缓存中的数据写入文件。
- 参数:无
- 返回:无
move(self, move_data: Dict[str, Any], key_banned: Optional[List[str]] = None)
控制所有控制器运动。可指定跳过部分 key。
- 参数:
move_data
(Dict[str, Any]):分层控制指令(控制器类型 -> 控制器名 -> 控制内容)-
key_banned
(List[str], 可选):要从 move_data 中移除的字段名 -
返回:无
is_start(self) -> bool
判断是否应开始动作。默认实现永远返回 True,可在子类中重写。
- 参数:无
- 返回:
bool
: 默认返回 True
reset(self) -> bool
复位机器人状态。默认实现永远返回 True,可在子类中重写。
- 参数:无
- 返回:
bool
: 默认返回 True
replay(self, data_path: str, key_banned: Optional[List[str]] = None)
读取并回放一段动作数据。
- 参数:
data_path
(str):.hdf5
数据路径-
key_banned
(List[str], 可选): 控制时忽略的字段名 -
返回:无
play_once(self, episode: Dict[str, Any], key_banned: Optional[List[str]] = None)
回放单帧 episode 中的动作。
- 参数:
episode
(Dict[str, Any]):单帧数据-
key_banned
(List[str], 可选): 控制时忽略字段 -
返回:无
工具函数
get_array_length(data: Dict[str, Any]) -> int
获取最外层 np.ndarray
的长度。
- 参数:
-
data
(Dict[str, Any]):嵌套字典 -
返回:
int
: 数据长度
split_nested_dict(data: Dict[str, Any], idx: int) -> Dict[str, Any]
提取嵌套数据结构中的第 idx 帧。
- 参数:
data
(Dict[str, Any]):嵌套字典-
idx
(int):索引帧 -
返回:
Dict[str, Any]
: 第idx
帧数据
dict_to_list(data: Dict[str, Any]) -> List[Dict[str, Any]]
将嵌套字典结构转换为按帧排列的列表。
- 参数:
-
data
(Dict[str, Any]):嵌套字典 -
返回:
List[Dict[str, Any]]
: 按帧拆分的列表
remove_duplicate_keys(source_dict: dict[str, Any], keys_to_remove: list[str]) -> dict[str, Any]
从字典中删除指定键。
- 参数:
source_dict
(dict): 原始字典-
keys_to_remove
(list): 要删除的 key -
返回:
dict
: 删除后的新字典