本文先将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 = Falseready_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_valvel_y = fly_state.kinematics_estimated.linear_velocity.y_valvel_z = fly_state.kinematics_estimated.linear_velocity.z_valx = fly_state.kinematics_estimated.orientation.x_valy = fly_state.kinematics_estimated.orientation.y_valz = fly_state.kinematics_estimated.orientation.z_valw = fly_state.kinematics_estimated.orientation.w_valvel_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_zvel_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_zvel_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_zreturn 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