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

相关推荐
明明跟你说过27 分钟前
Linux中的【tcpdump】:深入介绍与实战使用
linux·运维·测试工具·tcpdump
Komorebi.py1 小时前
【Linux】-学习笔记05
linux·笔记·学习
Mr_Xuhhh2 小时前
重生之我在学环境变量
linux·运维·服务器·前端·chrome·算法
内核程序员kevin5 小时前
TCP Listen 队列详解与优化指南
linux·网络·tcp/ip
朝九晚五ฺ9 小时前
【Linux探索学习】第十四弹——进程优先级:深入理解操作系统中的进程优先级
linux·运维·学习
自由的dream9 小时前
Linux的桌面
linux
xiaozhiwise10 小时前
Makefile 之 自动化变量
linux
意疏12 小时前
【Linux 篇】Docker 的容器之海与镜像之岛:于 Linux 系统内探索容器化的奇妙航行
linux·docker
BLEACH-heiqiyihu12 小时前
RedHat7—Linux中kickstart自动安装脚本制作
linux·运维·服务器