如果 Point 和 Vector3 几何消息完全相同,它们之间有什么区别?

What is the difference between the Point and Vector3 geometry message if they're exactly the same?

我是 ROS 的新手,但我正在处理由 geometry_msgs/Pointgeometry_msgs/Vector3 消息组成的自定义消息。当我打印出消息时,我注意到 PointVector3 都具有相同的 3 个属性(xyz),这让我很好奇,因为它似乎是多余的……对吧?

进一步挖掘源代码后,发现 PointVector3 完全相同。它们都由 float xfloat yfloat z 组成。

但是在阅读了 docs 之后,这两个消息之间似乎存在差异。文档提到,如果用户想要应用平移,则应使用 Point,而 Vector3 应仅用于表示方向(我猜是幅度?)。

由于两条消息的定义完全相同,我想如果我可以将翻译应用于 Point,我也可以将翻译应用于 Vector3PointVector3 之间有什么我没有看到的区别,那不是他们的名字吗?

即使 PointVector3 具有相同的内容,tf2 库也会检查消息的类型并根据它是否是 PointVector3.

最终,开发人员决定强调 Point(space 中无法旋转的点)和 Vector3(在 space 中没有确定位置但可以旋转的方向)。

开发人员不必做出这种区分,事实上许多物理库使用单一 Vector3 数据类型来处理方向、点、速度等。

与颜色(红、绿、蓝)和日期(年、月、日)和许多其他可以表示为 Vector3 的东西一样,最终归结为需要人工绘制使用户和其他程序员更容易理解代码的区别。