协作头脑风暴
brainstorming
在实现前澄清需求、探索设计选择,并形成清晰的开发方向。
extension-and-control【开发与工程】This skill guides users through IR-SIM registry extensions, external state ownership, and keyboard or Matplotlib control integration.
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Use this route when a task involves a custom individual or group behavior, kinematics or map-generator registration, an external state owner, keyboard or mouse input, or a controller boundary such as a CBF/QP wrapper. Keep ordinary YAML scene authoring in scene-configuration, the simulation lifecycle in simulation-environments, sensor/map consumption in sensing-and-mapping, and built-in behavior or planner selection in navigation-and-planning.
Install the base distribution and verify the import before adding optional input or solver packages:
python -m pip install ir-sim
python -c "import irsim; print(irsim.__version__)"
Decide who owns state. Use normal internal stepping for IR-SIM kinematics,
behaviors, or an action supplied to env.step(action). Use external
stepping when another simulator/controller supplies every object's state and
velocity; follow the external sequence.
Load custom behavior modules explicitly with
env.load_behavior("module_name") after the module is importable on
sys.path. The loader reinitializes registered individual and group class
handlers; it does not make a file importable by filename alone.
Run the bundled, headless registration check from the sub-skill directory:
python scripts/custom_behavior_smoke.py
It uses process-local registries and in-memory fixtures; it does not open a
GUI or require pynput, pyrvo, or a QP solver. Check its parser without
running it with python scripts/custom_behavior_smoke.py --help.
(kinematics, name) pairs. Register the behavior for
the kinematics used by the YAML object and return an action with that
kinematics' action dimension; a behavior name alone is not portable.ValueError; kinematics
registration also rejects a different class under the same normalized key.
Use an isolated process or unique test names for experiments.name, yaml_param_names, constructor, and _build_grid() define
the YAML-facing contract; the framework injects grid width and height
and computes them from resolution.env.step() with
no action. Do not mix env.step(action=...) with external state ownership.
Use env.refresh() when a direct state mutation must be observable before a
step; never mutate private state fields as a shortcut.The helper and references are self-contained runtime material. The source checkout, usage scripts, native tests, and private inspection environment are evidence only and are not runtime dependencies.