本文先将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-****博客
AirSim学习日志 6-无人机状态读取_airsim角度测量-****博客
大疆无人机中的角速度信息读取
大疆无人机中角速度的两个话题:
相关查询:
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