Browse Source

AP_Mount: use logger Write method for logging Solo gimbal

Also document the messages
c415-sdk
Peter Barker 5 years ago committed by Andrew Tridgell
parent
commit
9142f877e7
  1. 103
      libraries/AP_Mount/SoloGimbal.cpp

103
libraries/AP_Mount/SoloGimbal.cpp

@ -384,49 +384,80 @@ void SoloGimbal::update_target(const Vector3f &newTarget)
void SoloGimbal::write_logs() void SoloGimbal::write_logs()
{ {
AP_Logger *logger = AP_Logger::get_singleton(); AP_Logger &logger = AP::logger();
if (logger == nullptr) {
return;
}
const uint64_t tstamp = AP_HAL::micros64(); const uint64_t tstamp = AP_HAL::micros64();
Vector3f eulerEst;
// @LoggerMessage: GMB1
// @Vehicles: Copter
// @Description: Solo Gimbal measurements
// @Field: TimeUS: Time since system startup
// @Field: dt: sum of time across measurements in this packet
// @Field: dax: delta-angle sum, x-axis
// @Field: day: delta-angle sum, y-axis
// @Field: daz: delta-angle sum, z-axis
// @Field: dvx: delta-velocity sum, x-axis
// @Field: dvy: delta-velocity sum, y-axis
// @Field: dvz: delta-velocity sum, z-axis
// @Field: jx: joint angle, x
// @Field: jy: joint angle, y
// @Field: jz: joint angle, z
logger.Write(
"GMB1",
"TimeUS,dt,dax,day,daz,dvx,dvy,dvz,jx,jy,jz",
"ssrrrEEELLL",
"FC000000000",
"Qffffffffff",
tstamp,
_log_dt,
_log_del_ang.x,
_log_del_ang.y,
_log_del_ang.z,
_log_del_vel.x,
_log_del_vel.y,
_log_del_vel.z,
_measurement.joint_angles.x,
_measurement.joint_angles.y,
_measurement.joint_angles.z
);
Quaternion quatEst; Quaternion quatEst;
_ekf.getQuat(quatEst); _ekf.getQuat(quatEst);
Vector3f eulerEst;
quatEst.to_euler(eulerEst.x, eulerEst.y, eulerEst.z); quatEst.to_euler(eulerEst.x, eulerEst.y, eulerEst.z);
struct log_Gimbal1 pkt1{ // @LoggerMessage: GMB2
LOG_PACKET_HEADER_INIT(LOG_GIMBAL1_MSG), // @Vehicles: Copter
time_us : tstamp, // @Description: Solo Gimbal estimation and demands
delta_time : _log_dt, // @Field: TimeUS: Time since system startup
delta_angles_x : _log_del_ang.x, // @Field: es: Solo Gimbal EKF status bits
delta_angles_y : _log_del_ang.y, // @Field: ex: Solo Gimbal EKF estimate of gimbal angle, x-axis
delta_angles_z : _log_del_ang.z, // @Field: ey: Solo Gimbal EKF estimate of gimbal angle, y-axis
delta_velocity_x : _log_del_vel.x, // @Field: ez: Solo Gimbal EKF estimate of gimbal angle, y-axis
delta_velocity_y : _log_del_vel.y, // @Field: rx: Angular velocity demand around x-axis
delta_velocity_z : _log_del_vel.z, // @Field: ry: Angular velocity demand around y-axis
joint_angles_x : _measurement.joint_angles.x, // @Field: rz: Angular velocity demand around z-axis
joint_angles_y : _measurement.joint_angles.y, // @Field: tx: Angular position target around x-axis
joint_angles_z : _measurement.joint_angles.z // @Field: ty: Angular position target around y-axis
}; // @Field: tz: Angular position target around z-axis
logger->WriteBlock(&pkt1, sizeof(pkt1)); logger.Write(
"GMB2",
struct log_Gimbal2 pkt2{ "TimeUS,es,ex,ey,ez,rx,ry,rz,tx,ty,tz",
LOG_PACKET_HEADER_INIT(LOG_GIMBAL2_MSG), "s-rrrEEELLL",
time_us : tstamp, "F-000000000",
est_sta : (uint8_t) _ekf.getStatus(), "QBfffffffff",
est_x : eulerEst.x, tstamp,
est_y : eulerEst.y, (uint8_t) _ekf.getStatus(),
est_z : eulerEst.z, eulerEst.x,
rate_x : _ang_vel_dem_rads.x, eulerEst.y,
rate_y : _ang_vel_dem_rads.y, eulerEst.z,
rate_z : _ang_vel_dem_rads.z, _ang_vel_dem_rads.x,
target_x: _att_target_euler_rad.x, _ang_vel_dem_rads.y,
target_y: _att_target_euler_rad.y, _ang_vel_dem_rads.z,
target_z: _att_target_euler_rad.z _att_target_euler_rad.x,
}; _att_target_euler_rad.y,
logger->WriteBlock(&pkt2, sizeof(pkt2)); _att_target_euler_rad.z
);
_log_dt = 0; _log_dt = 0;
_log_del_ang.zero(); _log_del_ang.zero();

Loading…
Cancel
Save