跳到主要内容

axes-previewer:在 ENU 参考坐标系下预览物体坐标轴方向的 Python 小工具

·98 字·1 分钟

最近在 GitHub 上开源了一个小项目 axes-previewer,用来在三维场景里预览 ENU(East–North–Up) 参考系下、符合右手定则的物体坐标轴方向。写文档、做教学演示,或者只是想在脑子里把「前右上」和「东北天」对齐时,有一个可交互、可导图的视图会省事很多,于是做了这个工具。

怎么用 #

Windows 用户可以直接从 Releases 下载预编译可执行文件运行。界面大致是左侧三维预览、右侧参数面板,改完后点 Apply 刷新;也可导出 PNG / SVG

程序会画出一个带网格与刻度的三维空间,并叠加几层信息:

  • 背景六个方位标注:up / down / front / back / left / right
  • 角落里的 ENU 参考轴(E / N / U),与空间语义对照
  • 原点处半透明立方体上的 X / Y / Z 轴箭头,约束为右手系
  • 立方体某个面上的文字(物体名称、正面朝向等,可配置)
  • 某个面上的黑色圆点,用来示意芯片 Pin1 一类标记(可配置面与角位)

ENU 与常见「前后左右上下」的对应关系在仓库 README 里用表格写得很清楚,核心对应是:前→北、右→东、上→天 等,便于和导航、地理或传感器文档里的说法对齐。

实现上的一点设计 #

代码主体在 cartesian_3d.py,逻辑上可以分成三块:

  1. 空间网格与六方位背景轴——整体参照,由 view_config_t 等配置驱动视角与网格等。
  2. 角落 ENU 参考轴——由 corner_axes_config_t 控制长度、偏移、标签等。
  3. 中间立方体——面文字、Pin1 圆点、X/Y/Z 轴方向等,集中在 center_object_config_t

这些配置都是 @dataclass(frozen=True),其中 axis_directions 会通过 _validate_and_get_axis_vectors() 校验:三个方向互不重复,且满足 X × Y = Z 的右手系;不合法会直接抛 ValueError,避免「画出来看似合理、实际违反约定」的静默错误。

更细的字段说明(例如 face_text_axisface_name 的合法组合、圆点 face_dot_corner 等)都写在仓库 README 里,这里不再重复。

建议在 Linux 环境下,按照 README 中的说明进行开发。

小结与链接 #

若你也在折腾 IMU、相机、芯片封装方向或任何要把「物体坐标」和「ENU / 东南西北」对齐的场景,欢迎试用。