mavros坐标系转换与方向

8 篇文章 5 订阅

2021.05.04更新:

本文中提到的kinetic版本的mavros中body系的坐标系问题已经被修复为FLU坐标系,只需要更新kinetic版本的mavros即可!

sudo apt install ros-kinetic-mavros
sudo apt install ros-kinetic-mavros-msgs

----------原文分界线----------------------------------------------------------------------

本文写于2021年1月21日,以后mavros的坐标系方向可能还会变动。

mavros的坐标系真的比较乱,而且和px4所常用的坐标系不同。px4使用的坐标系为NED(北东地)坐标系或者FRD(前右下)坐标系。然而mavros中常使用的是ENU(东北天)坐标系或者body系(下面细讲),mavros会自动将输入的ENU坐标值或者body系坐标值转换到NED坐标系中,再通过mavlink发送给飞控。具体说明可以参考mavros的github仓库中的说明

mavros的话题中常见的坐标系有global系、local系、body系

global系好理解,是gps坐标系,经纬度什么的,用的不多。

local系指当地坐标系,一般是ENU坐标系,坐标原点一般在起飞点。如果有offset的话坐标原点在飞机上,这时其实是导航坐标系。

body系就比较有意思了。如果你用apt安装的ros-kinetic-mavros(二进制安装),即kinetic版本的mavros,则body系是RFU(右前上)坐标系,坐标原点在机体上。这个RFU坐标系表面上和ENU系有点像,但其实在工程领域和各大教材中都没有采用。因此在melodic版本中,body系已经改成了FLU(前左上)坐标系。在最新的mavros源码里,body系也已经更换成了FLU坐标系,因此是如果用源码编译的mavros,body系都是FLU系。

这个mavros的更改发生在:https://github.com/mavlink/mavros/pull/1446/files

其中,baselink系就是mavros所使用的body系(FLU),aircraft系是px4所使用的body系(FRD),用到的transform细节可以在/mavros/mavros/src/lib/ftf_frame_conversions.cpp/mavros/include/mavros/frame_tf.h中找到。

因此,使用kinetic和melodic版本的mavros一定要注意这个body系的差别。

具体到mavros中的话题,比如我们常用的mavros/setpoint_raw/local话题,话题类型是mavros_msgs/PositionTarget,这个话题类型官方解释如下:

其中coordinate_frame的说明不仅错误,而且极容易误导人。

px4中相关的issue:https://github.com/mavlink/mavros/issues/1500

coordinate_frame=1虽然代表向px4发送NED坐标值,但是你发送到这个话题的坐标系应该用ENU,mavros会自动完成这个坐标系的转换。同样的,coordinate=8 也不是NED系,而是FLU系。目前px4暂不支持向话题里发布coordinate=7、9的坐标值。

如果是用apt安装的旧版kinetic版本的mavros,恐怕body系还是奇怪的RFU系。切记切记。

  • 13
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值