全局配置

general 块控制 FastSim 的全局行为:项目扫描(自动注册用户定义的 stereotype)、资产根路径映射(解析 root_key:// 路径)、缓存目录(远端/平台资产缓存)、日志系统(终端输出、文件记录与轮转)以及性能分析

源码:fastsim/configs/general_cfg.pyGeneralConfig

字段说明

字段类型默认值说明
scan_projectboolfalse启动时扫描用户项目,自动注册自定义 stereotype
root_pathsdict[str, str]{}资产根路径映射表,键名即 root_key:// 协议中的协议头
cache_dirstrnull资产缓存目录(用于 remote/platform 资产);null 时使用 JOYSIM_CACHE_DIR 环境变量,否则回退到 ~/.joysim_cache
silenced_loggerslist[str]["isaaclab", "omni", "carb", "curobo"]需要静默的第三方日志器名称列表
log_to_terminalbooltrue是否将日志输出到终端
log_terminal_levelstrDEBUG终端日志级别(DEBUG / INFO / WARNING / ERROR / CRITICAL)
log_output_dirstrnull日志文件输出目录,null 则不写入文件
log_output_namestrnull日志文件名(不含扩展名),null 则自动生成
log_file_levelstrDEBUG文件日志级别
log_file_formatstrtext日志文件格式:text / json
log_file_max_size_mbfloat10.0单个日志文件最大尺寸(MB)
log_file_backup_countint5日志文件轮转保留的备份数量
enable_profilingboolfalse启用每帧性能分析
profiling_outlier_threshold_msfloat500.0性能分析异常值阈值(毫秒)

校验规则root_paths 中每个路径值必须是已存在的本地目录,否则 validate_root_paths() 在启动时抛出错误。

资产路径解析

配置文件中的 asset_pathhdf5_pathbackend_root_path 等路径字段均通过 Asset.resolve_url_path() 统一解析(源码:fastsim/utils/asset.py)。支持五种格式:

格式示例说明
绝对路径/data/robots/ur5.usd直接使用
相对路径./assets/cube.usd相对于当前工作目录
root_key:// 协议assets://robots/ur5.usdassets 映射到 root_paths["assets"],拼接后得到完整路径
远端 URLhttps://example.com/ur5.usd自动下载并缓存到 cache_dir
platform:// 协议platform://object/<asset_name>platform://<cfs_path>从 FastSim 资产平台拉取并缓存

root_key:// 是最推荐的用法——它将具体机器路径集中在 general.root_paths 中管理,其余配置文件只使用逻辑路径,便于在不同机器和用户间共享配置。

platform:// 协议则提供了跨团队共享资产的统一入口,由 joysim/utils/platform/ 模块处理鉴权和按需下载,详见下文。

资产平台远程资源访问(platform://)

FastSim 资产平台(默认 https://assets.fastsim.hofee.cn)是一个集中式的远端资产仓库,支持物体、机器人、场景、工作空间和材质等五类资产的版本化管理。platform:// 协议是访问平台资产的统一入口,运行时会自动鉴权、流式下载、本地缓存。

源码:joysim/utils/platform/PlatformClient + PlatformFetcher

URL 协议格式

platform:// 支持两种引用形式:

形式格式示例
资产形式platform://<category>/<asset_ref>[/<subpath>]platform://objects/can_016/Aligned.usd
路径形式platform://<cfs_relative_path>platform://objects/omni6DPose/can/can_016/Aligned.usd
  • <category>:资产类别,必须为 object / robot / scene / workspace / material 之一
  • <asset_ref>:资产名称(如 can_016)或 UUID
  • <subpath>:资产目录下的具体文件,省略则返回整个资产目录
  • 路径形式下的 <cfs_relative_path> 是平台 CFS 根目录下的完整相对路径(默认 CFS 根:cfs://cfs-1205-dongjiang-bt/simstudio/assets/

鉴权配置

通过环境变量配置鉴权信息,二选一:

方式一:直接使用 Token(推荐)

bash
export FASTSIM_TOKEN=<your-token>

适合 CI/CD、Docker 镜像等场景。Token 可在资产平台的"个人中心"页面获取。

方式二:用户名 + 密码(自动续 Token)

bash
export JOYSIM_PLATFORM_USERNAME=<your-username>
export JOYSIM_PLATFORM_PASSWORD=<your-password>

每次启动仿真时自动登录获取 Token;Token 失效(401 响应)时会自动重新登录。

可选环境变量

环境变量默认值说明
FASTSIM_TOKEN直接使用的 Bearer Token
JOYSIM_PLATFORM_USERNAME自动登录用户名
JOYSIM_PLATFORM_PASSWORD自动登录密码
JOYSIM_PLATFORM_BASE_URLhttps://assets.fastsim.hofee.cn/api自定义平台主机(私有部署时使用)
JOYSIM_PLATFORM_CFS_ROOTcfs://cfs-1205-dongjiang-bt/simstudio/assets/自定义 CFS 根路径
JOYSIM_CACHE_DIR~/.joysim_cache资产缓存目录(也可通过 general.cache_dir 配置)

环境变量的优先级高于 general.cache_dir

YAML 中使用

要让某个实体从资产平台加载,将其 source 设为 platformasset_path 设为 platform:// URL 即可:

yaml
scene:
  name: pick_and_place
  base_config:
    name: workspace
    stereotype: usd
    source: platform
    asset_path: platform://scenes/kujiale/827310_home/workspace_00.usd

  object_cfg_dict:
    can_016:
      stereotype: rigid
      source: platform
      asset_path: platform://objects/omni6DPose/can/can_016/Aligned.usd
      scale: [0.001, 0.001, 0.001]
      position: [0.0, -3.79, 0.5]

    plug_001:
      stereotype: rigid
      source: platform
      asset_path: platform://objects/omni6DPose/plug/plug_001/Aligned.usd

工作机制

  1. 首次请求:调用 GET /assets/{category}/{asset_id} 拿到资产元信息(uuid / cfs_uri / size),随后通过 GET /files/tar?uri=<cfs_uri> 流式拉取整个资产目录的 zstd 压缩 tar 包,解压到本地缓存。
  2. 缓存命中:之后再加载同一资产时直接读取本地缓存,0 网络请求。
  3. 完整性检查:缓存目录下放置 .joysim_complete 哨兵文件标识下载完整性,.joysim_meta.json 记录元数据;中途崩溃的下载会在下次启动时重新拉取。
  4. 并发安全:多个进程同时请求同一资产时,只有一个执行下载,其余进程等待完成后读取缓存,避免重复下载。

缓存目录结构

text
~/.joysim_cache/
└── platform/
    ├── object/
    │   └── <uuid>/
    │       ├── .joysim_complete         # 下载完成哨兵
    │       ├── .joysim_meta.json        # 元数据(asset_id / cfs_uri / mtime)
    │       ├── Aligned.usd
    │       ├── textures/
    │       └── materials/
    ├── robot/
    │   └── <uuid>/...
    ├── scene/
    └── files/                            # 路径形式 URL 的缓存
        └── <md5(folder_uri)>/...

资产形式按 UUID 索引,路径形式按文件夹 URI 的 MD5 索引。整个资产目录作为一个整体下载,因此 USD 内部的相对路径引用可以直接解析。

常见问题

问题原因 / 处理
PlatformAuthError: Missing FASTSIM_TOKEN ...未设置鉴权环境变量;按上文配置 Token 或用户名密码
401 Unauthorized 持续出现Token 失效或密码错误;先在浏览器登录平台,更新 FASTSIM_TOKEN
404 for <category>/<asset_id>资产名/UUID 不存在;登录平台确认资产是否在对应 category 下
下载缓慢检查 JOYSIM_CACHE_DIR 是否在快速磁盘上;同一资产的并发请求会共享一次下载
想清除缓存重新下载删除 ~/.joysim_cache/platform/<category>/<uuid>/ 目录即可

配置示例

yaml
general:
  scan_project: true
  root_paths:
    assets: /home/user/robot_assets
    datasets: /home/user/datasets
  cache_dir: /var/cache/joysim
  log_to_terminal: true
  log_terminal_level: INFO
  log_output_dir: ./logs
  enable_profiling: false

使用效果:

yaml
# assets://robots/ur5.usd → /home/user/robot_assets/robots/ur5.usd
# datasets://runs/run001  → /home/user/datasets/runs/run001
robot_cfg_dict:
  arm:
    asset_path: assets://robots/ur5.usd

extension:
  extension_cfg_dict:
    record:
      backend_root_path: datasets://runs/run001

性能分析

启用 enable_profiling 后,FastSim 会记录每帧各阶段(命令执行、物理步进、后处理回调等)的耗时,并在仿真结束时输出统计报告,包括平均耗时与超过 profiling_outlier_threshold_ms 的异常帧。