mavlink: HIGHRES_IMU stream added

This commit is contained in:
Anton Babushkin
2014-07-23 22:40:55 +02:00
parent 7ecf66c06d
commit 20698c751c
2 changed files with 133 additions and 118 deletions
+2 -3
View File
@@ -1324,7 +1324,7 @@ Mavlink::task_main(int argc, char *argv[])
switch (_mode) { switch (_mode) {
case MAVLINK_MODE_NORMAL: case MAVLINK_MODE_NORMAL:
configure_stream("SYS_STATUS", 1.0f); configure_stream("SYS_STATUS", 1.0f);
/*configure_stream("GPS_GLOBAL_ORIGIN", 0.5f); configure_stream("GPS_GLOBAL_ORIGIN", 0.5f);
configure_stream("HIGHRES_IMU", 1.0f); configure_stream("HIGHRES_IMU", 1.0f);
configure_stream("ATTITUDE", 10.0f); configure_stream("ATTITUDE", 10.0f);
configure_stream("VFR_HUD", 8.0f); configure_stream("VFR_HUD", 8.0f);
@@ -1336,7 +1336,6 @@ Mavlink::task_main(int argc, char *argv[])
configure_stream("GLOBAL_POSITION_SETPOINT_INT", 3.0f); configure_stream("GLOBAL_POSITION_SETPOINT_INT", 3.0f);
configure_stream("ROLL_PITCH_YAW_THRUST_SETPOINT", 3.0f); configure_stream("ROLL_PITCH_YAW_THRUST_SETPOINT", 3.0f);
configure_stream("DISTANCE_SENSOR", 0.5f); configure_stream("DISTANCE_SENSOR", 0.5f);
*/
break; break;
case MAVLINK_MODE_CAMERA: case MAVLINK_MODE_CAMERA:
@@ -1369,7 +1368,7 @@ Mavlink::task_main(int argc, char *argv[])
hrt_abstime t = hrt_absolute_time(); hrt_abstime t = hrt_absolute_time();
update_rate_mult(); update_rate_mult();
warnx("rate mult %f", (double)_rate_mult); warnx("rate mult %.2f", (double)_rate_mult);
if (param_sub->update(&param_time, nullptr)) { if (param_sub->update(&param_time, nullptr)) {
/* parameters updated */ /* parameters updated */
+131 -115
View File
@@ -454,99 +454,115 @@ protected:
}; };
//class MavlinkStreamHighresIMU : public MavlinkStream class MavlinkStreamHighresIMU : public MavlinkStream
//{ {
//public: public:
// const char *get_name() const const char *get_name() const
// { {
// return MavlinkStreamHighresIMU::get_name_static(); return MavlinkStreamHighresIMU::get_name_static();
// } }
//
// static const char *get_name_static() static const char *get_name_static()
// { {
// return "HIGHRES_IMU"; return "HIGHRES_IMU";
// } }
//
// uint8_t get_id() uint8_t get_id()
// { {
// return MAVLINK_MSG_ID_HIGHRES_IMU; return MAVLINK_MSG_ID_HIGHRES_IMU;
// } }
//
// static MavlinkStream *new_instance() static MavlinkStream *new_instance(Mavlink *mavlink)
// { {
// return new MavlinkStreamHighresIMU(); return new MavlinkStreamHighresIMU(mavlink);
// } }
//
//private: unsigned get_size()
// MavlinkOrbSubscription *sensor_sub; {
// uint64_t sensor_time; return MAVLINK_MSG_ID_HIGHRES_IMU_LEN + MAVLINK_NUM_NON_PAYLOAD_BYTES;
// }
// uint64_t accel_timestamp;
// uint64_t gyro_timestamp; private:
// uint64_t mag_timestamp; MavlinkOrbSubscription *sensor_sub;
// uint64_t baro_timestamp; uint64_t sensor_time;
//
// /* do not allow top copying this class */ uint64_t accel_timestamp;
// MavlinkStreamHighresIMU(MavlinkStreamHighresIMU &); uint64_t gyro_timestamp;
// MavlinkStreamHighresIMU& operator = (const MavlinkStreamHighresIMU &); uint64_t mag_timestamp;
// uint64_t baro_timestamp;
//protected:
// explicit MavlinkStreamHighresIMU() : MavlinkStream(), /* do not allow top copying this class */
// sensor_sub(nullptr), MavlinkStreamHighresIMU(MavlinkStreamHighresIMU &);
// sensor_time(0), MavlinkStreamHighresIMU& operator = (const MavlinkStreamHighresIMU &);
// accel_timestamp(0),
// gyro_timestamp(0), protected:
// mag_timestamp(0), explicit MavlinkStreamHighresIMU(Mavlink *mavlink) : MavlinkStream(mavlink),
// baro_timestamp(0) sensor_sub(nullptr),
// {} sensor_time(0),
// accel_timestamp(0),
// void subscribe(Mavlink *mavlink) gyro_timestamp(0),
// { mag_timestamp(0),
// sensor_sub = mavlink->add_orb_subscription(ORB_ID(sensor_combined)); baro_timestamp(0)
// } {}
//
// void send(const hrt_abstime t) void subscribe()
// { {
// struct sensor_combined_s sensor; sensor_sub = _mavlink->add_orb_subscription(ORB_ID(sensor_combined));
// }
// if (sensor_sub->update(&sensor_time, &sensor)) {
// uint16_t fields_updated = 0; void send(const hrt_abstime t)
// {
// if (accel_timestamp != sensor.accelerometer_timestamp) { struct sensor_combined_s sensor;
// /* mark first three dimensions as changed */
// fields_updated |= (1 << 0) | (1 << 1) | (1 << 2); if (sensor_sub->update(&sensor_time, &sensor)) {
// accel_timestamp = sensor.accelerometer_timestamp; uint16_t fields_updated = 0;
// }
// if (accel_timestamp != sensor.accelerometer_timestamp) {
// if (gyro_timestamp != sensor.timestamp) { /* mark first three dimensions as changed */
// /* mark second group dimensions as changed */ fields_updated |= (1 << 0) | (1 << 1) | (1 << 2);
// fields_updated |= (1 << 3) | (1 << 4) | (1 << 5); accel_timestamp = sensor.accelerometer_timestamp;
// gyro_timestamp = sensor.timestamp; }
// }
// if (gyro_timestamp != sensor.timestamp) {
// if (mag_timestamp != sensor.magnetometer_timestamp) { /* mark second group dimensions as changed */
// /* mark third group dimensions as changed */ fields_updated |= (1 << 3) | (1 << 4) | (1 << 5);
// fields_updated |= (1 << 6) | (1 << 7) | (1 << 8); gyro_timestamp = sensor.timestamp;
// mag_timestamp = sensor.magnetometer_timestamp; }
// }
// if (mag_timestamp != sensor.magnetometer_timestamp) {
// if (baro_timestamp != sensor.baro_timestamp) { /* mark third group dimensions as changed */
// /* mark last group dimensions as changed */ fields_updated |= (1 << 6) | (1 << 7) | (1 << 8);
// fields_updated |= (1 << 9) | (1 << 11) | (1 << 12); mag_timestamp = sensor.magnetometer_timestamp;
// baro_timestamp = sensor.baro_timestamp; }
// }
// if (baro_timestamp != sensor.baro_timestamp) {
// mavlink_msg_highres_imu_send(_channel, /* mark last group dimensions as changed */
// sensor.timestamp, fields_updated |= (1 << 9) | (1 << 11) | (1 << 12);
// sensor.accelerometer_m_s2[0], sensor.accelerometer_m_s2[1], sensor.accelerometer_m_s2[2], baro_timestamp = sensor.baro_timestamp;
// sensor.gyro_rad_s[0], sensor.gyro_rad_s[1], sensor.gyro_rad_s[2], }
// sensor.magnetometer_ga[0], sensor.magnetometer_ga[1], sensor.magnetometer_ga[2],
// sensor.baro_pres_mbar, sensor.differential_pressure_pa, mavlink_highres_imu_t msg;
// sensor.baro_alt_meter, sensor.baro_temp_celcius,
// fields_updated); msg.time_usec = sensor.timestamp;
// } msg.xacc = sensor.accelerometer_m_s2[0];
// } msg.yacc = sensor.accelerometer_m_s2[1];
//}; msg.zacc = sensor.accelerometer_m_s2[2];
msg.xgyro = sensor.gyro_rad_s[0];
msg.ygyro = sensor.gyro_rad_s[1];
msg.zgyro = sensor.gyro_rad_s[2];
msg.xmag = sensor.magnetometer_ga[0];
msg.ymag = sensor.magnetometer_ga[1];
msg.zmag = sensor.magnetometer_ga[2];
msg.abs_pressure = sensor.baro_pres_mbar;
msg.diff_pressure = sensor.differential_pressure_pa;
msg.pressure_alt = sensor.baro_alt_meter;
msg.temperature = sensor.baro_temp_celcius;
msg.fields_updated = fields_updated;
_mavlink->send_message(MAVLINK_MSG_ID_HIGHRES_IMU, &msg);
}
}
};
// //
// //
//class MavlinkStreamAttitude : public MavlinkStream //class MavlinkStreamAttitude : public MavlinkStream
@@ -567,7 +583,7 @@ protected:
// return MAVLINK_MSG_ID_ATTITUDE; // return MAVLINK_MSG_ID_ATTITUDE;
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamAttitude(); // return new MavlinkStreamAttitude();
// } // }
@@ -624,7 +640,7 @@ protected:
// return MAVLINK_MSG_ID_ATTITUDE_QUATERNION; // return MAVLINK_MSG_ID_ATTITUDE_QUATERNION;
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamAttitudeQuaternion(); // return new MavlinkStreamAttitudeQuaternion();
// } // }
@@ -686,7 +702,7 @@ protected:
// return MAVLINK_MSG_ID_VFR_HUD; // return MAVLINK_MSG_ID_VFR_HUD;
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamVFRHUD(); // return new MavlinkStreamVFRHUD();
// } // }
@@ -783,7 +799,7 @@ protected:
// return MAVLINK_MSG_ID_GPS_RAW_INT; // return MAVLINK_MSG_ID_GPS_RAW_INT;
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamGPSRawInt(); // return new MavlinkStreamGPSRawInt();
// } // }
@@ -846,7 +862,7 @@ protected:
// return MAVLINK_MSG_ID_GLOBAL_POSITION_INT; // return MAVLINK_MSG_ID_GLOBAL_POSITION_INT;
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamGlobalPositionInt(); // return new MavlinkStreamGlobalPositionInt();
// } // }
@@ -918,7 +934,7 @@ protected:
// return MAVLINK_MSG_ID_LOCAL_POSITION_NED; // return MAVLINK_MSG_ID_LOCAL_POSITION_NED;
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamLocalPositionNED(); // return new MavlinkStreamLocalPositionNED();
// } // }
@@ -979,7 +995,7 @@ protected:
// return MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE; // return MAVLINK_MSG_ID_VICON_POSITION_ESTIMATE;
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamViconPositionEstimate(); // return new MavlinkStreamViconPositionEstimate();
// } // }
@@ -1039,7 +1055,7 @@ protected:
// return MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN; // return MAVLINK_MSG_ID_GPS_GLOBAL_ORIGIN;
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamGPSGlobalOrigin(); // return new MavlinkStreamGPSGlobalOrigin();
// } // }
@@ -1109,7 +1125,7 @@ protected:
// } // }
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamServoOutputRaw<N>(); // return new MavlinkStreamServoOutputRaw<N>();
// } // }
@@ -1179,7 +1195,7 @@ protected:
// return MAVLINK_MSG_ID_HIL_CONTROLS; // return MAVLINK_MSG_ID_HIL_CONTROLS;
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamHILControls(); // return new MavlinkStreamHILControls();
// } // }
@@ -1319,7 +1335,7 @@ protected:
// return MAVLINK_MSG_ID_GLOBAL_POSITION_SETPOINT_INT; // return MAVLINK_MSG_ID_GLOBAL_POSITION_SETPOINT_INT;
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamGlobalPositionSetpointInt(); // return new MavlinkStreamGlobalPositionSetpointInt();
// } // }
@@ -1375,7 +1391,7 @@ protected:
// return MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT; // return MAVLINK_MSG_ID_LOCAL_POSITION_SETPOINT;
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamLocalPositionSetpoint(); // return new MavlinkStreamLocalPositionSetpoint();
// } // }
@@ -1433,7 +1449,7 @@ protected:
// return MAVLINK_MSG_ID_ROLL_PITCH_YAW_THRUST_SETPOINT; // return MAVLINK_MSG_ID_ROLL_PITCH_YAW_THRUST_SETPOINT;
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamRollPitchYawThrustSetpoint(); // return new MavlinkStreamRollPitchYawThrustSetpoint();
// } // }
@@ -1491,7 +1507,7 @@ protected:
// return MAVLINK_MSG_ID_ROLL_PITCH_YAW_RATES_THRUST_SETPOINT; // return MAVLINK_MSG_ID_ROLL_PITCH_YAW_RATES_THRUST_SETPOINT;
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamRollPitchYawRatesThrustSetpoint(); // return new MavlinkStreamRollPitchYawRatesThrustSetpoint();
// } // }
@@ -1549,7 +1565,7 @@ protected:
// return MAVLINK_MSG_ID_RC_CHANNELS_RAW; // return MAVLINK_MSG_ID_RC_CHANNELS_RAW;
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamRCChannelsRaw(); // return new MavlinkStreamRCChannelsRaw();
// } // }
@@ -1643,7 +1659,7 @@ protected:
// return MAVLINK_MSG_ID_MANUAL_CONTROL; // return MAVLINK_MSG_ID_MANUAL_CONTROL;
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamManualControl(); // return new MavlinkStreamManualControl();
// } // }
@@ -1702,7 +1718,7 @@ protected:
// return MAVLINK_MSG_ID_OPTICAL_FLOW; // return MAVLINK_MSG_ID_OPTICAL_FLOW;
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamOpticalFlow(); // return new MavlinkStreamOpticalFlow();
// } // }
@@ -1760,7 +1776,7 @@ protected:
// return 0; // return 0;
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamAttitudeControls(); // return new MavlinkStreamAttitudeControls();
// } // }
@@ -1828,7 +1844,7 @@ protected:
// return MAVLINK_MSG_ID_NAMED_VALUE_FLOAT; // return MAVLINK_MSG_ID_NAMED_VALUE_FLOAT;
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamNamedValueFloat(); // return new MavlinkStreamNamedValueFloat();
// } // }
@@ -1886,7 +1902,7 @@ protected:
// return 0; // return 0;
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamCameraCapture(); // return new MavlinkStreamCameraCapture();
// } // }
@@ -1944,7 +1960,7 @@ protected:
// return MAVLINK_MSG_ID_DISTANCE_SENSOR; // return MAVLINK_MSG_ID_DISTANCE_SENSOR;
// } // }
// //
// static MavlinkStream *new_instance() // static MavlinkStream *new_instance(Mavlink *mavlink)
// { // {
// return new MavlinkStreamDistanceSensor(); // return new MavlinkStreamDistanceSensor();
// } // }
@@ -1997,7 +2013,7 @@ StreamListItem *streams_list[] = {
new StreamListItem(&MavlinkStreamHeartbeat::new_instance, &MavlinkStreamHeartbeat::get_name_static), new StreamListItem(&MavlinkStreamHeartbeat::new_instance, &MavlinkStreamHeartbeat::get_name_static),
new StreamListItem(&MavlinkStreamCommandLong::new_instance, &MavlinkStreamCommandLong::get_name_static), new StreamListItem(&MavlinkStreamCommandLong::new_instance, &MavlinkStreamCommandLong::get_name_static),
new StreamListItem(&MavlinkStreamSysStatus::new_instance, &MavlinkStreamSysStatus::get_name_static), new StreamListItem(&MavlinkStreamSysStatus::new_instance, &MavlinkStreamSysStatus::get_name_static),
// new StreamListItem(&MavlinkStreamHighresIMU::new_instance, &MavlinkStreamHighresIMU::get_name_static), new StreamListItem(&MavlinkStreamHighresIMU::new_instance, &MavlinkStreamHighresIMU::get_name_static),
// new StreamListItem(&MavlinkStreamAttitude::new_instance, &MavlinkStreamAttitude::get_name_static), // new StreamListItem(&MavlinkStreamAttitude::new_instance, &MavlinkStreamAttitude::get_name_static),
// new StreamListItem(&MavlinkStreamAttitudeQuaternion::new_instance, &MavlinkStreamAttitudeQuaternion::get_name_static), // new StreamListItem(&MavlinkStreamAttitudeQuaternion::new_instance, &MavlinkStreamAttitudeQuaternion::get_name_static),
// new StreamListItem(&MavlinkStreamVFRHUD::new_instance, &MavlinkStreamVFRHUD::get_name_static), // new StreamListItem(&MavlinkStreamVFRHUD::new_instance, &MavlinkStreamVFRHUD::get_name_static),