首页 >> 大全

Airsim无人机状态获取getMultirotorState

2023-09-13 大全 35 作者:考证青年

无人状态获取

此 API 一次调用即可返回车辆的状态。状态包括碰撞、估计运动学(即通过融合传感器计算的运动学)和时间戳(自纪元以来的纳秒)。这里的运动学意味着 6 个量:位置、方向、线速度和角速度、线速度和角加速度。请注意, 目前不支持状态估计器,这意味着 的估计和地面实况运动学值将相同。但是,除了角加速度外,还可以为 PX4 提供估计的运动学。所有量都在 NED 坐标系中,世界坐标系中的 SI 单位除了角速度和加速度在体坐标系中。

这个状态是由传感器估计的状态,并不是无人机状态的真值。

默认的无人机底层飞控 并不支持状态估计,所以如果是 飞控,此函数得到的状态与真值相同。

使用PX4 飞控可以获取估计的状态

fly_state = client.getMultirotorState()# query vehicle state
def getMultirotorState(self, vehicle_name = ''):"""Args:vehicle_name (str, optional): Vehicle to get the state ofReturns:MultirotorState:"""return MultirotorState.from_msgpack(self.client.call('getMultirotorState', vehicle_name))
getMultirotorState.__annotations__ = {'return': MultirotorState}

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

此API获得的是相对于起始位置的无人机状态,其中速度为起始位置xyz方向的速度。

无法获取打印机状态__获取radio选中状态

 class KinematicsState(MsgpackMixin):position = Vector3r()               # 位置orientation = Quaternionr()         # 姿态角linear_velocity = Vector3r()        # 速度angular_velocity = Vector3r()       # 机体角速率linear_acceleration = Vector3r()    # 加速度angular_acceleration = Vector3r()   # 机体角加速度

相对于全局的速度转换为无人机自身的速度

    fly_state = client.getMultirotorState()vel_x = fly_state.kinematics_estimated.linear_velocity.x_valvel_y = fly_state.kinematics_estimated.linear_velocity.y_valvel_z = fly_state.kinematics_estimated.linear_velocity.z_valx = fly_state.kinematics_estimated.orientation.x_valy = fly_state.kinematics_estimated.orientation.y_valz = fly_state.kinematics_estimated.orientation.z_valw = fly_state.kinematics_estimated.orientation.w_valvel_x_self = (1-2*(y**2)-2*(z**2))*vel_x    + (2*x*y - 2*z*w)*vel_y             + (2*x*z + 2*y*w)*vel_zvel_y_self = (2*x*y + 2*z*w)*vel_x          + (1 - 2*(x**2) - 2*(z**2))*vel_y   + (2*y*z - 2*x*w)*vel_zvel_z_self = (2*x*z - 2*y*w)*vel_x          + (2*y*z + 2*x*w)*vel_y             + (1-2*(x**2)-2*(y**2))*vel_zreturn vel_x_self,vel_y_self,vel_z_self

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了