Airsim无人机状态获取getMultirotorState_果然爱的博客-程序员资料

技术标签: 自动驾驶  机器学习  无人机  人工智能  

Airsim无人机状态获取getMultirotorState

getMultirotorState

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

这个状态是由传感器估计的状态,并不是无人机状态的真值。
AirSim默认的无人机底层飞控 simple_flight 并不支持状态估计,所以如果是simple_flight 飞控,此函数得到的状态与真值相同。
使用PX4 飞控可以获取估计的状态

fly_state = client.getMultirotorState()

# query vehicle state
def getMultirotorState(self, vehicle_name = ''):
    """
    Args:
        vehicle_name (str, optional): Vehicle to get the state of

    Returns:
        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 = False
     ready_message = ""
     can_arm = False

KinematicsState

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

 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_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.orientation.x_val
    y = fly_state.kinematics_estimated.orientation.y_val
    z = fly_state.kinematics_estimated.orientation.z_val
    w = fly_state.kinematics_estimated.orientation.w_val

    vel_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_z
    vel_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_z
    vel_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_z
    
    return vel_x_self,vel_y_self,vel_z_self

在这里插入图片描述

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_44691296/article/details/119923403

智能推荐

数据通信基础1——软考_MSL7141的博客-程序员资料

通信系统基本模型: 数据通信基本计算模拟信号带宽计算:W=F2-F1(F2>F1) 数字信道带宽计算: 1.无噪声情况下用奈奎斯特定理:B=2W(B码元速率、波特率) 信息量n(位)与码元种类N:n= 数据速率R=B=2W 2.有噪声情况下用香农定理:) C:数据速率,W:信道带宽,S:信号的平均功率,N:噪声的平均...

在Windows下搭建Android2.2开发环境_pm1978的博客-程序员资料

<br />经过一晚的奋斗,终于在在Windows下搭建成功 Android2.2 开发环境,使用文章:<br /> <br /> <br />北京时间5月20日22:30分,谷歌正式发布了旗下智能手机操作系统的新版本Android 2.2(代号“Froyo”冻酸奶)。11项新特性也让众多Android爱好者非常期待.在这里向大家介绍最新的安装配置教程。<br />(1)在http://java.sun.com/javase/downloads/index.jsp下载JDK6,安装JDK,省略。安装完毕后,

零基础入门深度学习(6) - 长短时记忆网络(LSTM)_Godswisdom的博客-程序员资料

@hanbingtao 2017-08-28 19:55 字数 27396 阅读 175727零基础入门深度学习(6) - 长短时记忆网络(LSTM)机器学习 深度学习入门无论即将到来的是大数据时代还是人工智能时代,亦或是传统行业使用人工智能在云上处理大数据的时代,作为一个有理想有追求的程序员,不懂深度学习(Deep Learning)这个超热的技术,会不会感觉马上就out了?现在救命稻草来...

Asp.Net--回调技术_diaobeizhou2045的博客-程序员资料

实现回调技术需要以下步骤:1.实现ICallbakEventHandler2.实现接口中的方法:RaiseCallbackEvent3.实现GetCallbackResult方法解释参数void RaiseCallbackEvent(string eventArgument)处理以控件为目的的回调事件表示要传递到事件处理程序...

入门mel_尼禄米粒儿的博客-程序员资料

1:认识mel创建一个半径为 25 单位名字为qiu的球polySphere -radius 25 -name qiu;Z轴旋转90度rotate -r 0 0 90 qiu ;创建一个X位移5的关节joint -p 5 0 0 ;2:使用单引号或eval,获取 MEL 命令的返回值string $a[ ]; $a = `particle -p 5 0 5 -name Sun`; print ($a); 与使用单引号相比,eval 命令允许命令中包含字符串变

js图片预加载实现!_weixin_30265103的博客-程序员资料

var myImage = (function(){  var imgNode = document.createElement( 'img' );  document.body.appendChild( imgNode );    return {      setSrc: function( src ){       imgNode.src = src;      ...

随便推点

java代码自动生成UML-工具集_java生成uml_yongxing510的博客-程序员资料

在网上找了很多,要不就是过期没有更新,新版本Eclipse无法兼容,要不就是收费,后来终于在开源组织找到了能用的http://www.open-open.com/28.htm  ArgoUML 使用java编写的开源UML产品,功能比较全。最受欢迎的UML建模工具。 更多ArgoUML信息 

深度学习环境安装之显卡驱动程序安装-程序员资料

深度学习环境安装包括显卡驱动程序安装、CUDA/cudnn安装、TensorFlow2安装和pycharm环境配置与测试四部分 首先先检查自己的自己 的电脑有没有GPU,如果没有GPU 的话就不需要安装显卡驱动程序(建议学习深度学习时使用带英伟达显卡的电脑)没有GPU也能安装CUDA/CUDNN 和Tensorflow2。先检查自己 的驱动:桌面>我的电脑>右键下拉菜单>管理>设备管理器>显示适配器如图: 有些gpu显卡不带gpu字样,需要自行查阅1.首先打开浏览器进入英伟达官网,找到GeF

移远NB-IoT BC28 AT指令集_bc28模块at指令_AAAAAAyaya的博客-程序员资料

1、介绍NB-IoT BC28BC28 是一款超紧凑、高性能、低功耗的多频段 NB-IoT 无线通信模块,支持B1/B3/B8/B5/B20/B28 频段。其尺寸仅为17.7mm×15.8mm ×2.0mm,能最大限度地满足终端设备对小尺寸模块产品的需求,同时有效地帮助客户减小产品尺寸并优化产品成本。BC28 在设计上兼容移远通信 GSM/GPRS 系列的 M26 模块,方便客户快速、灵活的进行产品设计和升级。...

黑马程序员--java项目之交通灯管理系统_weixin_30293079的博客-程序员资料

-------android培训、java培训、期待与您交流! ----------一、交通灯管理系统的项目需求二、结合图具体分析并编写代码  1、每条路线上都会出现多辆车,路线上要随机增加新的车,在灯绿期间还减少车。  设计一个Road类来表示路线,每个Road对象代表一条路线,总共有12条路线,即系统中总共要产生12个Road实例对象。  每条路线上随机增加新的车辆,增加...

Pycharm自动添加文件头注释和函数注释参数的方法_pychain注释显示方法参数_tmccmt的博客-程序员资料

Pycharm自动添加文件头注释和函数注释参数的方法1.自动添加文件头注释文件头模板设置路径Settings-&gt;Editor-&gt;File and Code Templates-&gt;Python Script参考模板:#!/usr/bin/env python# -*- coding: UTF-8 -*-'''@Project :${PROJECT_NAME} @File :${NAME}[email protected] :${USER}@Date :${DATE} ${TIME}

Git中删除Gitee远程仓库中某个文件的提交记录_gitee删除提交记录_霸道流氓气质的博客-程序员资料

场景配置文件中配置了用户名和密码等数据,但是将其给提交并推送到Gitee上去了。此时再文件提交历史中就暴露了这些信息。如何将远端该文件的提交记录删除掉。注:博客:霸道流氓气质的博客_程序员资料-C#,架构之路,SpringBoot领域博主关注公众号霸道的程序猿获取编程相关电子书、教程推送与免费下载。实现1、首先在本地将该文件手动备份出一份,然后在本地打开git终端,删除该文件的提交记录git filter-branch -f --index-filter 'git

推荐文章

热门文章

相关标签