跳转至

Mesh 获取与准备

这个项目需要一个 3D mesh 作为目标。mesh 就是模拟中会反射雷达能量的物体。

Mesh 从哪里来

仓库里已经包含两个示例 mesh:

  • examples/meshes/box.obj
  • examples/meshes/Thanh.glb

box.obj 是一个简单测试物体。Thanh.glb 是一个公开人体模型,来源是:

https://github.com/hmthanh/3d-human-model

人体模型比盒子更接近真实目标表面,所以适合用来观察更复杂的雷达回波结构。

支持哪些格式

模拟器支持:

  • OBJ
  • STL
  • GLB

无论输入是哪种格式,内部都会转换成统一的 TriangleMesh

模拟器会用 Mesh 的哪些信息

模拟器只使用几何信息:

  • 顶点
  • 三角面
  • 面中心
  • 面法向
  • 面面积

它不会使用:

  • 纹理
  • 材质
  • 颜色
  • 骨骼
  • 动画

这点很重要。视觉上好看的 3D 模型,不一定就是好的雷达目标。当前模拟器看到的只是三角表面。

推荐的 Mesh 特征

第一次使用时,mesh 最好满足:

  • 面数不要太大
  • 几何尽量是干净三角面
  • 尺度接近真实物理尺寸
  • 放在雷达前方
  • 不要有大量细小孤立碎片

大 mesh 会变慢,因为当前可见性判断使用的是直接射线三角面相交。

面数预算

大 mesh 可以用 --max-faces 降低面数:

python -m mimo_fmcw_radar_simulator_multiprocess \
  --mesh examples/meshes/Thanh.glb \
  --max-faces 1200 \
  --num-chirps 16 \
  --output examples/output/thanh_run.npz

这样可以让早期实验跑得动。它会随机选择一部分 face,并重新映射顶点索引,保证 mesh 仍然有效。

单位和尺度

雷达仿真对尺度很敏感。如果 mesh 原本单位是厘米,但被当成米使用,目标就会比预期大 100 倍。

使用自定义 mesh 前,建议检查:

  • 物体尺寸按米看是否合理?
  • 目标是否在雷达前方?
  • 初始距离是否合理?
  • face 数量是否可控?

实用流程

  1. 把目标导出成 OBJSTLGLB
  2. 第一次先用简化版本。
  3. 如果 mesh 很密,用 --max-faces
  4. 第一次运行先减少 chirp 数。
  5. 生成热力图,检查距离和角度是否合理。
  6. 简单版本跑通后,再逐步增加 mesh 细节。

常见问题

问题 可能原因
仿真很慢 mesh 面数太多
没有明显回波 目标在雷达后方、尺度错误或面朝向不符合预期
距离很奇怪 mesh 单位尺度错了
信号很弱 可见面积太小或反射率太低