核心模块 API¶
场景¶
场景配置加载与 MjSpec 运行时组装器(阶段 A1 新增,暂未接入现有仿真回路)。
把"机械臂 + 公头 + 母头 + 环境"从单一硬编码 XML 拆成可配置的 MJCF 片段组合:
- 机械臂 MJCF(assets/iiwa14/iiwa14_arm.xml):纯机械臂,不含工具/环境元素;
- 工具片段(公头):根 body 必须命名为
dock(挂载位姿由场景 YAML 的tool.pose提供且相对 ee_site),并且片段内必须提供名为sensor_site的 site(力/力矩传感器的锚点,attach 后自动加前缀); - 目标片段(母头):根 body 必须命名为
dock,组装时经 worldbody frame 固定于世界系。
组装配方(MjSpec attach 机制)与 legacy 全量 XML(assets/iiwa14/ iiwa14_dock_updated.xml)物理逐位等价,等价性测试见 tests/test_scene.py。
类¶
Scene
dataclass
¶
完整对接场景:机械臂 + 公头 + 母头 + 物理 + 任务初始条件。
源代码位于: src/compliant_docking/scene.py
238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 | |
属性¶
方法:¶
build_mjmodel ¶
build_mjmodel() -> MjModel
按已验证配方组装 MjSpec 并编译为 MjModel。
配方顺序敏感(与 legacy XML 物理逐位等价,勿改 attach 语义与数值): 先设公头根 body 位姿再 attach(attach 把 body 位姿解释为相对 site 系); 母头经 worldbody frame 挂载;胶水与传感器在 attach 之后添加。
源代码位于: src/compliant_docking/scene.py
273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 | |
RobotSpec
dataclass
¶
机械臂描述:MJCF(组装基底)+ Pinocchio 模型 + 末端锚点/frame 名。
pin_model 是 Pinocchio 侧的模型路径,可以是 .urdf(URDF 解析)或
.xml(MJCF,经 buildModelFromMJCF 直读),load_pin_model 按后缀分发。
源代码位于: src/compliant_docking/scene.py
57 58 59 60 61 62 63 64 65 66 67 68 | |
ToolSpec
dataclass
¶
公头工具片段:根 body 必须叫 dock,须含 sensor_site site。
源代码位于: src/compliant_docking/scene.py
80 81 82 83 84 85 86 87 88 | |
ToolInertiaSpec
dataclass
¶
需追加入 Pinocchio 的固定工具惯量(MuJoCo 工具片段已有同一惯量)。
源代码位于: src/compliant_docking/scene.py
71 72 73 74 75 76 77 | |
TargetSpec
dataclass
¶
母头片段:根 body 必须叫 dock,经 worldbody frame 固定于世界系。
源代码位于: src/compliant_docking/scene.py
91 92 93 94 95 96 97 98 | |
PhysicsSpec
dataclass
¶
物理参数(与历史 XML option 对应)。
源代码位于: src/compliant_docking/scene.py
101 102 103 104 105 106 107 108 109 110 | |
TaskSpec
dataclass
¶
对接任务初始条件(历史硬编码值收编)。
源代码位于: src/compliant_docking/scene.py
113 114 115 116 117 118 119 120 | |
ImpedanceOverride
dataclass
¶
可选的任务空间阻抗增益覆盖(覆盖 ImpedanceConfig 对应字段)。
典型用途:带关节摩擦的机械臂(如 FR3 上游真实摩擦)需要更高刚度 压小静摩擦死区(死区 ≈ 摩擦阈值/k)。缺省段则完全沿用 ImpedanceConfig。
源代码位于: src/compliant_docking/scene.py
123 124 125 126 127 128 129 130 131 132 133 134 | |
HQPOverride
dataclass
¶
HQP-AC 可选参数覆盖(场景 YAML 的可选 hqp 段,缺省走控制器默认)。
.. code-block:: yaml
hqp:
force_source: sensor # "sensor"(F/T 传感器)| "observer"(PI 动量观测器,无传感器)
observer_kp: 20.0 # 观测器比例增益 [1/s]
observer_ki: 40.0 # 观测器积分增益 [1/s²]
preload_force: 0.0 # 接触预紧力目标 [N](世界系沿 stroke 方向,0=关闭)
preload_ramp_s: 1.5 # 预紧力斜坡时间 [s]
源代码位于: src/compliant_docking/scene.py
137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 | |
SE3ImpedanceOverride
dataclass
¶
SE(3) Lie 阻抗可选参数覆盖(场景 YAML 的可选 se3_impedance 段)。
缺省字段沿用 SE3ImpedanceConfig 默认(ImpedanceConfig 基线映射值)。 字段为 None 表示不覆盖。所有 *_diag 为 6 维列表(平动 3 + 姿态 3)。
.. code-block:: yaml
se3_impedance:
a_diag: [10.0, 10.0, 10.0, 1.0, 1.0, 1.0] # 期望惯量对角
d_diag: [80.0, 80.0, 80.0, 10.0, 10.0, 10.0]
k_diag: [50.0, 50.0, 50.0, 25.0, 25.0, 25.0]
null_damping: 10.0
源代码位于: src/compliant_docking/scene.py
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 | |
TrajectorySpec
dataclass
¶
轨迹段参数(可选):两段式对接 或 圆+8字跟踪测试。
对应场景 YAML 的可选 trajectory 扁平段;type 区分两类规划器
(缺省 "twophase",既有 YAML 不写 type 时行为不变):
.. code-block:: yaml
trajectory:
type: twophase # 可选 "twophase" | "tracking"(缺省 twophase)
# ---- twophase 专用 ----
standoff: 0.06 # 预对接点沿接近轴的后撤距离 [m]
v_max_approach: 0.10 # 接近段线速度上限 [m/s]
a_max_approach: 0.20 # 接近段线加速度上限 [m/s^2]
v_max_docking: 0.02 # 对接段线速度上限 [m/s]
a_max_docking: 0.05 # 对接段线加速度上限 [m/s^2]
# ---- tracking 专用(圆+8字跟踪测试) ----
transition_duration: 1.5 # 过渡段时长 [s]
circle_duration: 5.0 # 圆周段时长 [s]
circle_radius: 0.10 # 圆周半径 [m]
circle_frequency: 0.2 # 圆周频率 [Hz]
circle_center_offset: -0.06 # 圆心相对起点的 z 偏移 [m]
figure8_duration: 5.0 # 8 字段时长 [s]
figure8_radius_x: 0.10 # 8 字 x 半幅值 [m]
figure8_radius_y: 0.07 # 8 字 y 半幅值 [m]
figure8_frequency: 0.2 # 8 字频率 [Hz]
所有字段带默认值:tracking 场景只写 type: tracking 即可(twophase 字段
用默认值占位),twophase 场景沿用既有五参数写法(tracking 字段用默认值)。
源代码位于: src/compliant_docking/scene.py
181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 | |
函数:¶
load_scene ¶
load_scene(path: str | Path) -> Scene
加载场景 YAML 并解析为 Scene。
YAML 相对路径相对仓库根解析(与 models.py 的 ASSETS_DIR 同口径); 场景文件自身传相对路径时也按仓库根解析。
源代码位于: src/compliant_docking/scene.py
366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 | |
控制配置¶
仿真与控制参数配置:集中管理,避免魔法数字散落各处。
类¶
ImpedanceConfig
dataclass
¶
操作空间阻抗参数(平动 m/d/k + 姿态 m_rot/d_rot/k_rot)与零空间阻尼。
源代码位于: src/compliant_docking/config.py
7 8 9 10 11 12 13 14 15 16 17 18 | |
DockingConfig
dataclass
¶
对接任务与仿真设置。
源代码位于: src/compliant_docking/config.py
21 22 23 24 25 26 27 28 29 | |
HQPConfig
dataclass
¶
HQP-AC(分层二次规划自适应控制)参数。
取值参照 Ren & Shan 2026 (Acta Astronautica) 第 3.2 节与 Table D.12; 供 control.hqp_ac.HQPAdaptiveController 使用。
字段 / Fields: K0: 初始参考刚度对角向量(6 维:平动 3 + 姿态 3),Eq.(27) K_min_ratio: K_min = K_min_ratio·K0(逐元素),Eq.(27) 下界 k_alpha: 自适应刚度 sigmoid 增益,Eq.(26) omega_th: 可操作度奇异性阈值,Eq.(39) k_sa: 奇异性规避任务权重,Eq.(42) K_ji / D_ji: 关节位姿阻抗刚度/阻尼(7×7),Eq.(41) k_ji: 关节位姿阻抗任务权重,Eq.(42) dt_p: ZOH 短时域预测步长 [s],Eq.(34)-(36) 约束预测用 torque_limit: 关节力矩约束幅值 [N·m];None 时取 model.effortLimit eps_abs: ProxQP 求解绝对精度
源代码位于: src/compliant_docking/config.py
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | |
SE3ImpedanceConfig
dataclass
¶
SE(3) Lie 群阻抗参数(Kim et al. 2025 T-RO §III-A,Eq. 55-61)。
论文阻抗模型 A·V̇̃ + D·Ṽ + dexp⁻ᵀKλ = F̃ 的期望惯量/阻尼/刚度。
默认对角向量由既有 ImpedanceConfig 基线数值映射而来
(m=10, d=80, k=50;m_rot=1, d_rot=10, k_rot=25),仅作控制器间
公平对比的兼容性初值,不声称是论文最优参数。控制器内部以一般
6×6 矩阵持有 A/D/K(对角配置只是特例)。
字段 / Fields: A_diag: 期望惯量对角(平动质量 kg ×3,转动惯量 kg·m² ×3) D_diag: 期望阻尼对角(N·s/m ×3,N·m·s/rad ×3) K_diag: 期望刚度对角(N/m ×3,N·m/rad ×3) null_damping: 冗余零空间速度阻尼 [N·m·s/rad](仅稳定用, 不改变主任务;7-DoF 广义逆适配见控制器 Eq. 66 扩展) condition_threshold: 任务空间矩阵 Λ=(J M⁻¹ Jᵀ)⁻¹ 的条件数告警 阈值;超过时降级为带阈值的阻尼 pinv 并记录诊断
源代码位于: src/compliant_docking/config.py
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 | |
指标与门禁¶
对接性能指标套件(对标 Ren & Shan 2026, Acta Astronautica, Table 10)。
三层指标: 1. 接触安全:峰值轴向力、峰值广义力范数、稳态轴向力、稳态广义力范数; 2. 内部安全:最大关节角度/速度占模型限值百分比、最小可操作度; 3. 跟踪精度:位置跟踪 RMS、姿态跟踪 RMS、末端稳态横向误差、稳态姿态误差。
指标定义(与论文表 10 的对应关系): - 峰值轴向力:全程 |f_ext · axis| 的最大值,f_ext 为世界系外力,axis 为对接轴 单位向量(世界系,取轨迹推进方向);峰值取绝对值,接触反力沿轴反向时同样捕捉; - 峰值/稳态广义力范数:每步 6 维广义力 [f; τ] 的 2-范数的最大值/稳态均值。 注意:广义力范数包含力矩分量 τ,数值不等于纯接触力大小; - 稳态窗口:t ≥ t_end - steady_window 的采样段;稳态轴向力、稳态广义力范数、 稳态横向误差、稳态姿态误差均为该窗口内的时间均值; - 关节角度占比:|q - 限位区间中点| / 半量程 × 100%(到达任一限位时为 100%), 使用 pin_model.lowerPositionLimit/upperPositionLimit; - 关节速度占比:|v| / velocityLimit × 100%;某轴 velocityLimit ≤ 0(或非有限) 时该轴跳过,全部无效则该项为 None;均报告全程最大百分比与对应关节编号; - 最小可操作度:min sqrt(det(J Jᵀ)),J 为末端 frame 的世界系雅可比 (pin.computeFrameJacobian(..., pin.ReferenceFrame.WORLD),后处理逐帧计算); - 位置跟踪 RMS:sqrt(mean(error²)),error 为每步末端位置误差范数(log.error); - 姿态跟踪 RMS / 稳态姿态误差:基于世界系姿态误差向量 log(R_d Rᵀ) 的范数; 仅当 Log.orientation_errors 非空且长度与时间序列一致时计算,否则为 None。
所有数值字段均为 float | None,None 表示数据不足无法计算。
类¶
DockingMetrics
dataclass
¶
对接性能指标集合(None = 数据不足无法计算)。
源代码位于: src/compliant_docking/metrics.py
39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 | |
TrackingThresholds
dataclass
¶
自由空间跟踪通过柔顺对接前的默认门槛。
源代码位于: src/compliant_docking/metrics.py
90 91 92 93 94 95 96 97 98 99 | |
函数:¶
compute_metrics ¶
compute_metrics(
log: Log,
pin_model: Model,
*,
axis: ndarray,
ee_frame: str,
steady_window: float = 2.0,
) -> DockingMetrics
从仿真 Log 后处理计算对接性能指标(不进热循环)。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
log
|
Log
|
仿真日志(store_data 产出;可选含 orientation_errors 姿态误差序列) |
必需 |
pin_model
|
Model
|
Pinocchio 模型(提供关节限值/速度上限/雅可比) |
必需 |
axis
|
ndarray
|
对接轴方向(世界系;内部归一化,非单位向量也可) |
必需 |
ee_frame
|
str
|
末端 frame 名(可操作度雅可比取自该 frame) |
必需 |
steady_window
|
float
|
稳态窗口长度 [s](取 t ≥ t_end - steady_window) |
2.0
|
源代码位于: src/compliant_docking/metrics.py
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 | |
format_metrics ¶
format_metrics(m: DockingMetrics) -> str
把指标渲染为对齐的中文表格文本(三段,与 Table 10 分层一致;None 显示 n/a)。
源代码位于: src/compliant_docking/metrics.py
262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 | |
tracking_summary ¶
tracking_summary(
log: Log,
segments: Sequence[tuple[str, float, float]],
) -> str
圆+8字跟踪测试的分段误差统计(位置误差 RMS/峰值,单位 mm)。
按 segments 给出的时间窗 [t0, t1) 切片 log.error(每步末端位置误差范数,m), 计算每段 RMS 与峰值并换算为 mm;再加总全时程(全部采样点,含段外保持段)的 RMS/峰值。输出多行中文文本,打印风格与 format_metrics 对齐。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
log
|
Log
|
仿真日志(t_list 与 error 逐 step 对齐) |
必需 |
segments
|
Sequence[tuple[str, float, float]]
|
[(名称, t_start, t_end), ...],与 CircleFigure8Trajectory.segments 同构 |
必需 |
源代码位于: src/compliant_docking/metrics.py
302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 | |
compute_tracking_metrics ¶
compute_tracking_metrics(
log: Log,
segments: Sequence[tuple[str, float, float]],
) -> TrackingMetrics
从 Log 计算圆形/8 字跟踪门禁指标。
segments 使用轨迹规划器公开的 (name, start, end) 结构。姿态误差、
力矩限幅标记和接触数均是可选的向后兼容遥测字段;长度不匹配时相应指标为
None,由门禁作为数据不足处理。
源代码位于: src/compliant_docking/metrics.py
365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 | |
evaluate_tracking_gate ¶
evaluate_tracking_gate(
metrics: TrackingMetrics,
thresholds: TrackingThresholds,
*,
complete: bool,
) -> TrackingGateResult
按门槛判定跟踪测试;未完整覆盖轨迹只报告 INCOMPLETE。
源代码位于: src/compliant_docking/metrics.py
436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 | |
format_tracking_gate ¶
format_tracking_gate(
result: TrackingGateResult,
) -> str
以可审计的 PASS/FAIL/INCOMPLETE 文本格式输出跟踪门禁。
源代码位于: src/compliant_docking/metrics.py
496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 | |
遥测¶
源代码位于: src/compliant_docking/telemetry.py
23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 | |
方法:¶
reset_logs ¶
reset_logs()
重置记录数据:在每次仿真开始时调用
源代码位于: src/compliant_docking/telemetry.py
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | |
store_data ¶
store_data(
t: float,
q: ndarray,
v: ndarray,
pos_actual: ndarray,
vel_actual: ndarray,
error: float,
pos_desired: ndarray,
vel_desired: ndarray,
acc_desired: ndarray,
tau: ndarray,
external_force: ndarray,
external_torque: ndarray,
*,
orientation_error: ndarray | None = None,
torque_saturated: bool = False,
contact_count: int = 0,
)
存储数据(单步):时间、关节状态、末端状态、期望轨迹、力矩及外力
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
t
|
float
|
时间戳(秒) |
必需 |
q
|
ndarray
|
当前关节角 |
必需 |
v
|
ndarray
|
当前关节角速度 |
必需 |
pos_actual
|
ndarray
|
当前末端位置 |
必需 |
vel_actual
|
ndarray
|
当前末端速度 |
必需 |
error
|
float
|
末端位置跟踪误差范数 |
必需 |
pos_desired
|
ndarray
|
期望末端位置 |
必需 |
vel_desired
|
ndarray
|
期望末端速度 |
必需 |
acc_desired
|
ndarray
|
期望末端加速度 |
必需 |
tau
|
ndarray
|
控制器计算的关节力矩 |
必需 |
external_force
|
ndarray
|
传感器外力(控制参考系) |
必需 |
external_torque
|
ndarray
|
传感器外力矩(控制参考系) |
必需 |
orientation_error
|
ndarray | None
|
末端姿态误差向量(世界系,可选;None 时不记录) |
None
|
torque_saturated
|
bool
|
本步控制量是否触及软件力矩限幅(可选,默认 False) |
False
|
contact_count
|
int
|
本步 MuJoCo 接触对数量(可选,默认 0) |
0
|
源代码位于: src/compliant_docking/telemetry.py
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | |
plot_results ¶
plot_results(
save_path: str = "figure/",
*,
scene_name: str | None = None,
) -> list[Path]
绘制仿真结果(SciencePlots IEEE 中文风格,委托 plotting 模块)/ Plot simulation results (SciencePlots IEEE CJK style; delegates to plotting).
源代码位于: src/compliant_docking/telemetry.py
122 123 124 125 126 127 128 129 130 131 132 133 | |
模型加载¶
加载 Pinocchio 模型;gravity=False 时置零重力(与 MuJoCo 模型保持一致)。
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
urdf_path
|
str | Path
|
模型文件路径( |
PIN_URDF
|
gravity
|
bool
|
True 时保留模型自带重力;False(默认)时把重力线性分量置零 |
False
|
tool_frame
|
str | None
|
附加固定工具惯量的末端 frame 名(tool_* 参数须成组提供) |
None
|
tool_mount_pos
|
ndarray | None
|
工具挂载平移(相对 tool_frame) |
None
|
tool_mount_quat
|
ndarray | None
|
工具挂载四元数( |
None
|
tool_mass
|
float | None
|
工具质量(须为正) |
None
|
tool_com
|
ndarray | None
|
工具质心位置 |
None
|
tool_diaginertia
|
ndarray | None
|
工具转动惯量对角项(逐轴为正) |
None
|
返回:
| 类型 | 描述 |
|---|---|
Model
|
加载(并按需附加工具惯量)后的 Pinocchio 模型 |
Note
按文件后缀分发解析器:.urdf 走 URDF 解析,.xml(MJCF,如 FR3 的
Menagerie 模型变体)走 buildModelFromMJCF。两条路线同样置零重力。
源代码位于: src/compliant_docking/models.py
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 | |
绘图¶
plotting.py - SciencePlots IEEE 中文绘图 / SciencePlots IEEE plotting with CJK support
项目统一绘图入口:基于 SciencePlots 的 ["science", "ieee", "no-latex"] 风格
(IEEE 单栏、不依赖 LaTeX),叠加中文字体回退(Noto CJK)与
axes.unicode_minus=False(中文字体缺 U+2212 负号),每张图同时输出
PNG(位图)与 PDF(矢量)。
Unified plotting entry point for the project. Built on SciencePlots'
["science", "ieee", "no-latex"] style (IEEE single column, no LaTeX) with
a CJK font fallback (Noto) and axes.unicode_minus=False (CJK fonts lack
the U+2212 minus sign). Every figure is saved as both PNG (raster) and
PDF (vector).
Author: langxin11 Date: 2025
函数:¶
apply_style ¶
apply_style() -> None
应用 SciencePlots IEEE + 中文字体回退样式(幂等,可重复调用)/ Apply the SciencePlots IEEE style with CJK font fallback (idempotent).
源代码位于: src/compliant_docking/plotting.py
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | |
plot_docking_log ¶
plot_docking_log(
log: Log,
out_dir: str | Path,
*,
scene_name: str | None = None,
docking_axis: int = 2,
dpi: int = 600,
) -> list[Path]
绘制对接仿真结果图(SciencePlots IEEE 中文风格,PNG + PDF 双格式)/ Plot docking simulation results (SciencePlots IEEE style, PNG + PDF).
参数:
| 名称 | 类型 | 描述 | 默认 |
|---|---|---|---|
log
|
Log
|
已灌入时序数据的 telemetry.Log(须先 reset_logs + store_data)/ Populated telemetry.Log (reset_logs + store_data first) |
必需 |
out_dir
|
str | Path
|
图件输出目录(不存在则创建)/ Output directory (created if missing) |
必需 |
scene_name
|
str | None
|
文件名前缀;None 时用 "docking_" / Filename prefix; "docking_" if None |
None
|
docking_axis
|
int
|
对接轴索引(默认 2 = 世界 Z)/ Docking axis index (default 2 = world Z) |
2
|
dpi
|
int
|
PNG 输出分辨率 / PNG resolution |
600
|
返回:
| 类型 | 描述 |
|---|---|
list[Path]
|
生成的全部文件路径列表 / List of all generated file paths |
源代码位于: src/compliant_docking/plotting.py
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 | |