Commit a3e2cb96 authored by pixhawk's avatar pixhawk

Added new calibration actions

parent 9597d772
......@@ -391,6 +391,7 @@ void UAS::receiveMessage(LinkInterface* link, mavlink_message_t message)
{
mavlink_rc_channels_t channels;
mavlink_msg_rc_channels_decode(&message, &channels);
emit remoteControlRSSIChanged(channels.rssi/255.0f);
for (int i = 0; i < 8; i++)
{
switch (i)
......@@ -561,6 +562,43 @@ void UAS::setLocalPositionSetpoint(float x, float y, float z, float yaw)
#endif
}
void UAS::setLocalPositionOffset(float x, float y, float z, float yaw)
{
#ifdef MAVLINK_ENABLED_PIXHAWK_MESSAGES
mavlink_message_t msg;
mavlink_msg_position_control_offset_set_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, uasId, 0, x, y, z, yaw);
sendMessage(msg);
#endif
}
void UAS::startRadioControlCalibration()
{
mavlink_message_t msg;
mavlink_msg_action_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, uasId, MAV_COMP_ID_IMU, MAV_ACTION_CALIBRATE_RC);
sendMessage(msg);
}
void UAS::startMagnetometerCalibration()
{
mavlink_message_t msg;
mavlink_msg_action_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, uasId, MAV_COMP_ID_IMU, MAV_ACTION_CALIBRATE_MAG);
sendMessage(msg);
}
void UAS::startGyroscopeCalibration()
{
mavlink_message_t msg;
mavlink_msg_action_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, uasId, MAV_COMP_ID_IMU, MAV_ACTION_CALIBRATE_GYRO);
sendMessage(msg);
}
void UAS::startPressureCalibration()
{
mavlink_message_t msg;
mavlink_msg_action_pack(mavlink->getSystemId(), mavlink->getComponentId(), &msg, uasId, MAV_COMP_ID_IMU, MAV_ACTION_CALIBRATE_PRESSURE);
sendMessage(msg);
}
quint64 UAS::getUnixTime(quint64 time)
{
if (time == 0)
......
......@@ -221,6 +221,13 @@ public slots:
/** @brief Set local position setpoint */
void setLocalPositionSetpoint(float x, float y, float z, float yaw);
/** @brief Add an offset in body frame to the setpoint */
void setLocalPositionOffset(float x, float y, float z, float yaw);
void startRadioControlCalibration();
void startMagnetometerCalibration();
void startGyroscopeCalibration();
void startPressureCalibration();
signals:
......
......@@ -211,6 +211,12 @@ public slots:
virtual void enableRawSensorFusionTransmission(bool enabled) = 0;
virtual void setLocalPositionSetpoint(float x, float y, float z, float yaw) = 0;
virtual void setLocalPositionOffset(float x, float y, float z, float yaw) = 0;
virtual void startRadioControlCalibration() = 0;
virtual void startMagnetometerCalibration() = 0;
virtual void startGyroscopeCalibration() = 0;
virtual void startPressureCalibration() = 0;
protected:
QColor color;
......@@ -331,6 +337,8 @@ signals:
void positionYawControlEnabled(bool enabled);
/** @brief Value of a remote control channel */
void remoteControlChannelChanged(int channelId, float raw, float normalized);
/** @brief Remote control RSSI changed */
void remoteControlRSSIChanged(float rssi);
/**
* @brief Localization quality changed
......
......@@ -52,18 +52,21 @@ QGCRemoteControlView::QGCRemoteControlView(QWidget *parent) :
nameLabel = new QLabel(this);
nameLabel->setText("No MAV selected yet..");
layout->addWidget(nameLabel, 0, 0, 1, 2);
// Add spacer left of button
layout->addItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding), 2, 0);
// Set stretch to maximize spacer, not button
layout->setColumnStretch(0, 100);
layout->setColumnStretch(1, 1);
// Calibrate button
QPushButton* calibrateButton = new QPushButton(this);
calibrateButton->setText(tr("Calibrate"));
// Connect to calibration slot
connect(calibrateButton, SIGNAL(clicked()), this, SLOT(calibrate()));
// Add button
layout->addWidget(calibrateButton, 2, 1);
// RSSI bar
// Create new layout
QHBoxLayout* rssiLayout = new QHBoxLayout();
rssiLayout->setSpacing(5);
// Add content
rssiLayout->addWidget(new QLabel(tr("Signal"), this));
// Append raw label
// Append progress bar
rssiBar = new QProgressBar(this);
rssiBar->setMinimum(0);
rssiBar->setMaximum(100);
rssiBar->setValue(0);
rssiLayout->addWidget(rssiBar);
layout->addItem(rssiLayout, 2, 0, 1, 2);
setVisible(false);
connect(UASManager::instance(), SIGNAL(activeUASSet(int)), this, SLOT(setUASId(int)));
......@@ -75,11 +78,6 @@ QGCRemoteControlView::~QGCRemoteControlView()
delete channelLayout;
}
void QGCRemoteControlView::calibrate()
{
// Run auto-calibration
}
void QGCRemoteControlView::setUASId(int id)
{
if (uasId != -1)
......@@ -89,6 +87,7 @@ void QGCRemoteControlView::setUASId(int id)
{
// The UAS exists, disconnect any existing connections
disconnect(uas, SIGNAL(remoteControlChannelChanged(int,float,float)), this, SLOT(setChannel(int,float,float)));
disconnect(uas, SIGNAL(remoteControlRSSIChanged(float)), this, SLOT(setRemoteRSSI(float)));
}
}
......@@ -99,6 +98,7 @@ void QGCRemoteControlView::setUASId(int id)
// New UAS exists, connect
nameLabel->setText(QString("RC Input of %1").arg(newUAS->getUASName()));
connect(newUAS, SIGNAL(remoteControlChannelChanged(int,float,float)), this, SLOT(setChannel(int,float,float)));
connect(newUAS, SIGNAL(remoteControlRSSIChanged(float)), this, SLOT(setRemoteRSSI(float)));
}
}
......@@ -132,7 +132,7 @@ void QGCRemoteControlView::setRemoteRSSI(float rssiNormalized)
void QGCRemoteControlView::appendChannelWidget(int channelId)
{
// Create new layout
QHBoxLayout* layout = new QHBoxLayout(this);
QHBoxLayout* layout = new QHBoxLayout();
// Add content
layout->addWidget(new QLabel(QString("Channel %1").arg(channelId + 1), this));
QLabel* raw = new QLabel(this);
......
......@@ -51,7 +51,6 @@ public slots:
void setUASId(int id);
void setChannel(int channelId, float raw, float normalized);
void setRemoteRSSI(float rssiNormalized);
void calibrate();
void redraw();
protected slots:
......@@ -67,6 +66,7 @@ protected:
QVector<float> normalized;
QVector<QLabel*> rawLabels;
QVector<QProgressBar*> progressBars;
QProgressBar* rssiBar;
QLabel* nameLabel;
private:
......
......@@ -46,6 +46,12 @@ QGCSensorSettingsWidget::QGCSensorSettingsWidget(UASInterface* uas, QWidget *par
connect(ui->sendExtra1CheckBox, SIGNAL(toggled(bool)), mav, SLOT(enableExtra1Transmission(bool)));
connect(ui->sendExtra2CheckBox, SIGNAL(toggled(bool)), mav, SLOT(enableExtra2Transmission(bool)));
connect(ui->sendExtra3CheckBox, SIGNAL(toggled(bool)), mav, SLOT(enableExtra3Transmission(bool)));
// Calibration
connect(ui->rcCalButton, SIGNAL(clicked()), mav, SLOT(startRadioControlCalibration()));
connect(ui->magCalButton, SIGNAL(clicked()), mav, SLOT(startMagnetometerCalibration()));
connect(ui->pressureCalButton, SIGNAL(clicked()), mav, SLOT(startPressureCalibration()));
connect(ui->gyroCalButton, SIGNAL(clicked()), mav, SLOT(startGyroscopeCalibration()));
}
QGCSensorSettingsWidget::~QGCSensorSettingsWidget()
......
......@@ -90,38 +90,51 @@
<property name="title">
<string>Calibration Wizards</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<layout class="QGridLayout" name="gridLayout" columnstretch="0,50">
<property name="margin">
<number>6</number>
</property>
<item row="0" column="0">
<widget class="QPushButton" name="gyroCalButton">
<item row="1" column="0">
<widget class="QPushButton" name="magCalButton">
<property name="text">
<string>Start dynamic calibration</string>
<string>Start Mag. Calibration</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="gyroCalDate">
<item row="4" column="0">
<widget class="QPushButton" name="gyroCalButton">
<property name="text">
<string>Date unknown</string>
<string>Start Gyro Calibration</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QPushButton" name="magCalButton">
<item row="0" column="0">
<widget class="QPushButton" name="rcCalButton">
<property name="text">
<string>Start static calibration</string>
<string>Start RC Calibration</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QLabel" name="magCalLabel">
<item row="2" column="0">
<widget class="QPushButton" name="pressureCalButton">
<property name="text">
<string>Date unknown</string>
<string>Start Pressure Calibration</string>
</property>
</widget>
</item>
<item row="0" column="1">
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>0</width>
<height>0</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment