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

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

Airsim中的角速度信息获取

Airsim无人机状态获取:getMultirotorState

无人机状态类

python 复制代码
 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

动力学信息状态类

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

动力学信息:

python 复制代码
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轴方向位置(地面)

状态订阅使用方法:

python 复制代码
    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

类型名定义:

cpp 复制代码
TypeMap<TOPIC_ANGULAR_RATE_FUSIONED>::type           angle_velocity;

进行订阅相关信息:

cpp 复制代码
djtele.angle_velocity     = vehicle->subscribe->getValue<TOPIC_ANGULAR_RATE_FUSIONED>();

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

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

单位:

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

方向:

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

参考资料:

DJI Onboard SDK: Telemetry Topics

相关推荐
Sapphire~4 小时前
Linux-07 ubuntu 的 chrome 启动不了
linux·chrome·ubuntu
伤不起bb4 小时前
NoSQL 之 Redis 配置与优化
linux·运维·数据库·redis·nosql
广东数字化转型4 小时前
nginx怎么使用nginx-rtmp-module模块实现直播间功能
linux·运维·nginx
啵啵学习5 小时前
Linux 里 su 和 sudo 命令这两个有什么不一样?
linux·运维·服务器·单片机·ubuntu·centos·嵌入式
半桔5 小时前
【Linux手册】冯诺依曼体系结构
linux·缓存·职场和发展·系统架构
网硕互联的小客服6 小时前
如何利用Elastic Stack(ELK)进行安全日志分析
linux·服务器·网络·安全
冰橙子id6 小时前
linux——磁盘和文件系统管理
linux·运维·服务器
无聊的小坏坏7 小时前
环境变量深度解析:从配置到内核的全链路指南
linux·bash
才鲸嵌入式7 小时前
01 Ubuntu20.04下编译QEMU8.2.4,交叉编译32位ARM程序,运行ARM程序的方法
linux·c语言·单片机·嵌入式·arm·qemu·虚拟机
伤不起bb9 小时前
Kafka 消息队列
linux·运维·分布式·kafka