当前位置: 首页 > article >正文

无人机避障——大疆与Airsim中的角速度信息订阅获取

本文先将Airsim仿真中的角速度信息获取弄好,然后再将大疆SDK中的角速度话题订阅一下,并验证获取角速度信息,后续为DWA动态窗口法替代PID作为局部路径规划做足准备。

Airsim中的角速度信息获取

Airsim无人机状态获取:getMultirotorState

 无人机状态类

 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

动力学信息状态类 

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

动力学信息: 

angular_acceleration		# 角加速度
	x_val:	滚转角加速度
	y_val:	俯仰角加速度
	z_val:	偏航角加速度
angular_velocity    		# 角速度
	x_val:	滚转角速度
	y_val:	俯仰角速度
	z_val:	偏航角速度
linear_acceleration 		# 加速度
	x_val:	x轴方向加速度(正北)
	y_val:	y轴方向加速度(正东)
	z_val:	z轴方向加速度(地面)
linear_velocity     		# 速度
	x_val:	x轴方向速度(正北)
	y_val:	y轴方向速度(正东)
	z_val:	z轴方向速度(地面)
position            		# 位置
	x_val:	x轴方向位置(正北)
	y_val:	y轴方向位置(正东)
	z_val:	z轴方向位置(地面)

 状态订阅使用方法:

    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

运行结果:

 具有角速度的数据,说明Airsim中角速度订阅正确,这边对我后续算法有帮助的其实只有偏航角

单位:

根据实际测试结果是rad/s

方向:

顺时针为正,逆时针为负

参考资料: 

Airsim无人机状态获取getMultirotorState-CSDN博客

 AirSim学习日志 6-无人机状态读取_airsim角度测量-CSDN博客

大疆无人机中的角速度信息读取

 大疆无人机中角速度的两个话题:

 相关查询:

DJI Onboard SDK: Telemetry Topics

 话题TOPIC_ANGULAR_RATE_FUSIONED与TOPIC_ANGULAR_RATE_RAW 

类型名定义: 

TypeMap<TOPIC_ANGULAR_RATE_FUSIONED>::type           angle_velocity;

进行订阅相关信息: 

djtele.angle_velocity     = vehicle->subscribe->getValue<TOPIC_ANGULAR_RATE_FUSIONED>();

在修改完代码以后,记得在build文件夹下make一下,不然还是之前代码的效果。 

 重新运行代码就有了角速度的消息了:

单位:

根据官方SDK和实测数据显示,单位为rad/s

方向:

根据实测数据显示,顺时针为正,逆时针为负

参考资料:

DJI Onboard SDK: Telemetry Topics


http://www.kler.cn/a/383369.html

相关文章:

  • 【种完麦子,我就往南走,去西双版纳,过个冬天!】
  • STM32之看门狗
  • 2024年转行指南:大学生进军就业前景广阔的领域——人工智能大模型
  • 翻译工具开发技术笔记:《老挝语翻译通》app支持语音识别翻译功能,怎么提高语音识别的准确度呢?
  • android 怎么查看依赖包的大小
  • Golang | Leetcode Golang题解之第538题把二叉搜索树转换为累加树
  • [免费]SpringBoot+Vue(高校)学籍管理系统【论文+源码+SQL脚本】
  • 【原创】java+ssm+mysql收纳培训网系统设计与实现
  • 【Ajax】跨域
  • StarRocks 在 Shopee 数据产品的实践
  • 应用链风口下,一键发链该如何选择?
  • 数据结构模拟题[十]
  • Java项目实战II基于Java+Spring Boot+MySQL的智能推荐的卫生健康系统(开发文档+数据库+源码)
  • 编译google protobuf项目,生成相应语言的dll文件
  • React中类组件和函数组件的理解和区别
  • 微信小程序 uniapp+vue老年人身体监测系统 acyux
  • 域名申请网站需要了解的事项
  • springbootHR Nexus人力资源管理系统-计算机毕业设计源码23519
  • 背包九讲——背包问题求方案数
  • ssm032基于Java的汽车客运站管理系统的设计与实现+jsp(论文+源码)_kaic
  • 企业微信会话存档引用com.tencent.wework.Finance出错?
  • 新书速览|Java网络爬虫精解与实践
  • linux firewall 常用命令汇总
  • Android studio中关于printf和print和println的区别
  • 动态规划 之 路径问题 算法专题
  • 【TS】九天学会TS语法——1.TypeScript 是什么