Mavros: 重申 NED 和 ENU 之间的帧转换

创建于 2015-02-10  ·  21评论  ·  资料来源: mavlink/mavros

bug documentation

最有用的评论

我在看这个:
http://wiki.ros.org/geometry/CoordinateFrameConventions
http://www.ros.org/reps/rep-0103.html

图形有很多问题(如果它代表方向,则是代码):

  • ROS 总是右撇子。 ENU 图形(底行)是左手的,这是不正确的。
  • ROS 正在使用 ENU。 ENU 表示东-北-上,因此 X 轴指向EAST,零度航向沿 Y 轴

因此,零旋转时身体坐标系和世界坐标系之间没有区别,并且两个坐标系的 NED 和 ENU 之间的转换是相同的,分别使用全局/局部参考。

所有21条评论

也许有人可以评论当前的状态? 我目前没有时间来筛选代码,但我很乐意查看这些转换。

@LorenzMeier见 PR #208。

@LorenzMeier实际上,这是我们使用的当前约定:

身体固定 NED → ROS ENU:(xyz)→(x -y -z) 或 (wxyz)→(x -y -zw)
本地 NED → ROS ENU:(xyz)→(yx -z) 或 (wxyz)→(yx -zw)

image

我无法验证此图的正确性,但我认为这就是我们现在正在做的事情。

是的,这就是我的计划。 我可以确认,我在我的论文中使用并解释了它。

注意:这个转换是我们几个月前同意的,我能够在 Rviz 上确认。

问题不在于实际的转换,而在于使用某种转换时。

我在看这个:
http://wiki.ros.org/geometry/CoordinateFrameConventions
http://www.ros.org/reps/rep-0103.html

图形有很多问题(如果它代表方向,则是代码):

  • ROS 总是右撇子。 ENU 图形(底行)是左手的,这是不正确的。
  • ROS 正在使用 ENU。 ENU 表示东-北-上,因此 X 轴指向EAST,零度航向沿 Y 轴

因此,零旋转时身体坐标系和世界坐标系之间没有区别,并且两个坐标系的 NED 和 ENU 之间的转换是相同的,分别使用全局/局部参考。

我主要同意@LorenzMeier所说的。 但是,除非我非常误解上图中的每个坐标系,除了右下角的坐标系是左手坐标系。 也许您在图形的图例中错误地标记了 x 和 y 轴?

除此之外,我同意将 ENU 转换为 NED 是相同的,无论是用于地面框架还是车身框架。 在车身框架上,名称 ENU 或 NED 没有多大意义,但我认为从 ROS 中使用的坐标框架转换为 FCU 应该始终相同。

我还没有检查@mhkabir上面发布的转换方法。 认为我们需要在进行数学运算之前先获得正确的图形

@thedinuka根据您认为正确的内容,您介意在 Paint 或其他东西中创建一个新的。 ;)

我有原始文件,可以更改它然后发送一个新文件(无需使用油漆 @mhkabir)。 关于右手和左手的事情似乎是正确的。 但是我仍然对有两种不同的转换存有疑问,当我做那个图像时,我也有它们。 所以可能我们需要检查代码,因为据我所知,大多数实现都使用上述转换。

在等待@TSC21修改后的图形版本时,我对此进行了更多思考,它似乎比我最初想象的要复杂。 我有点同意@TSC21。 我们需要考虑两对不同的坐标变换。

1) 从身体固定框架的 ROS 约定到身体固定框架的 Pixhawk 约定的转换。
2)从地球固定坐标系的ROS约定转换为地球固定坐标系的Pixhawk约定。

虽然 ROS 端和 Pixhawk 端都有关于用于身体固定坐标系的约定的文档,但我找不到关于 Pixhawk 端使用的关于惯性(或地球固定)坐标系的约定的具体信息。 如果我不得不猜测,那么我会说在 Pixhawk 方面,在没有 GPS 的情况下,地球固定坐标系与身体固定坐标系的初始方向对齐,但我不能 100% 确定是否情况就是这样。 所以为了防止任何错误和混乱,我现在只考虑身体固定框架。

根据 ROS 的文档 [1] 和 Pixhawk 的文档 [2],我制作了下图。
body_coordinate_frames

一旦我们对上述(1)和(2)的坐标系图进行了验证、确认和同意,那么在 mavros 方面进行实际转换的数学计算就非常简单了。

[1] http://www.ros.org/reps/rep-0103.html
[2] https://pixhawk.org/dev/know-how/frames_of_reference

另请查看#148(协变转换)。

这可能有助于 ros-infrastructure/rep#95

我们结束了吗? ENU/NED、身体/世界框架的当前转换是否正确? 我问这个是因为我们需要迭代@blackcoder在发送视觉数据时在 FCU 上进行偏航旋转的可能性,因为我们做错了。
@vooon@mhkabir@tonybaltovski@thedinuka ping!

@thedinuka对我来说看起来不错。

如果我不得不猜测,那么我会说在 Pixhawk 方面,在没有 > GPS 的情况下,地球固定坐标系与 > 身体固定坐标系的初始方向对齐

其实不需要GPS。 我们已经有了来自 mag 的全局偏航参考。 这应该意味着使用此偏航旋转的 EF 框架。

你好,
我将主题从 mocap_optitrack 重新映射到 mavros 中的 vision_pose/pose。 但是 mav 不能正确飞行,所以我更改了以下代码
Vision_position_estimate(stamp.toNSec() / 1000,
position.y(), position.x(), -position.z(),
滚动,-俯仰,-偏航); // ??? 请检查!

vision_position_estimate(stamp.toNSec() / 1000,
position.y(), position.x(), -position.z(),
滚转,-俯仰,-偏航 + 1.57);
即将 -yaw 更改为 -yaw + 1.57。
将车身框架从 ENU 转换为 NED 时,mavros 现在使用
(xyz)-->(x,-y,-z)
(w,x,y,z)-->(x,-y,-z,w),所以我们得到
ENU ---> NED
滚---->滚
音高 ----->-音高
偏航 -----> -偏航。
但是我认为我们错误地认为偏航是基于世界坐标系中的 x 轴(当身体坐标系中的 x 与世界坐标系中的 x 一起时,偏航为 0),并且旋转 90 度。 所以我们应该让-yaw + 1.57。 IE
ENU ---> NED
滚---->滚
音高 ----->-音高
偏航 ----->-偏航+1.57。
在我改变它之后,mav 可以正确飞行。 所以我觉得其他插件也是这样。

@congleetea看起来是合法的。 您能否将相同的转换应用于设定点插件,看看结果如何? 此外,来自local_position主题的数据是否具有正确的方向,而无需应用相同的转换?

另请查看#148(协变转换)。

我们也必须考虑到这一点。

PR #317 更改转换。

我已经测试过这个对话

NED(Pixhawk)->ENU(ROS)
(X,Y,Z)->(X,-Y,-Z)

ENU(ROS)->NED(Pixhawk)
(X,Y,Z)->(X,-Y,-Z)

这在 rviz 和 real fling 中都很有效。

@supermice确认 #317 所以谢谢! :)

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

mohand150 picture mohand150  ·  5评论

tfoote picture tfoote  ·  5评论

watakandai picture watakandai  ·  8评论

RR2-IP2 picture RR2-IP2  ·  4评论

L4ncelot picture L4ncelot  ·  5评论