无人机避障——大疆与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

相关推荐
CS_浮鱼8 分钟前
【Linux】进程间通信
linux·运维·数据库
Altair12318 分钟前
实验6 基于端口和域名的虚拟主机
linux·运维·服务器·云计算
爱和冰阔落11 分钟前
【Linux工具链】编译效率革命:条件编译优化+动静态库管理+Makefile自动化,解决多场景开发痛点
linux·运维·自动化
wa的一声哭了17 分钟前
WeBASE管理平台部署-WeBASE-Web
linux·前端·网络·arm开发·spring boot·架构·区块链
Shylock_Mister36 分钟前
ARM与x86交叉编译实战排错指南
linux·c语言·arm开发
敲上瘾36 分钟前
MySQL事务全攻略:ACID特性、隔离级别与并发控制
linux·数据库·mysql·安全
b***9101 小时前
在linux(Centos)中Mysql的端口修改保姆级教程
linux·mysql·centos
shizhan_cloud1 小时前
Linux 交换空间管理
linux·运维
YouEmbedded1 小时前
解码死锁的产生与解决
linux·避免死锁·死锁产生·预防死锁·处理死锁
果子没有六分钟2 小时前
【Linux】进程调度器
linux·运维·服务器