airsim机体坐标系下的机体速度的获取与recording函数修改

本文介绍如何从airsim的局部坐标系转换到机体坐标系,利用四元数解算得到机体速度vel_body。airsim的getMultirotorState API提供了无人机状态信息,包括四旋翼飞行状态、GPS、时间戳等,但不直接提供机体速度。通过旋转矩阵的逆操作,可以得到从局部到机体的转换矩阵。参考相关博客和官方源码实现这一过程。
摘要由CSDN通过智能技术生成

airsim局部坐标系转化机体坐标系
airsim官方提供的state不包含机体坐标系的速度等信息,但包含了局部坐标系下的速度和当前机体在初始点的四元数矩阵,因此可通过四元数解算得到机体坐标系下的速度vel_body
一般来说四元矩阵的表示如下所示:
在这里插入图片描述
在这里插入图片描述
因此构造得到的旋转矩阵如下所示:
在这里插入图片描述
但得到的是从机体坐标系到局部坐标系的旋转矩阵,我们想要得到的是从局部坐标系到机体坐标系的旋转矩阵
由于旋转的可逆性和旋转矩阵的本身性质(旋转矩阵的逆即为矩阵的转置)
因此,局部坐标系向机体坐标系转化的旋转矩阵为:
在这里插入图片描述

airsim代码示意:

airsim提供了getMultirotorState作为获取无人机飞行状态信息的api函数。
该函数能够获取无人机的参数信息:是否碰撞无人机的状态(在simple飞行模式下为ue4构建的四旋翼飞行状态,以全局坐标系为基准)、GPS信息时间戳是否降落遥控器状态等信息。

	 class MultirotorState(MsgpackMixin):
     collision = CollisionInfo()                 # 碰撞信息
     kinematics_estimated = KinematicsState()    # 状态信息
     gps_location = GeoPoint()                   # GPS 信息
     timestamp = np.uint64(0)                    # 时间戳
     landed_state = LandedState.Landed           # 是否是降落状态
     rc_data = RCData()                          # 遥控器数据
     ready = False
     ready_message = ""
     can_arm = False

	因此通过该api获取无人机的全局速度与四元数,构造上述旋转矩阵即可得到无人机的局部速度(全局)向机体坐标系的转化
		fly_state = self.client.getMultirotorState()

        vel_x = fly_state.kinematics_estimated.linear_velocity.x_val
        vel_y = fly_state.kinematics_estimated.linear_velocity.y_val
        vel_z = fly_state.kinematics_estimated.linear_velocity.z_val

        x = fly_state.kinematics_estimated
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值