Browse Source

Joystick: fix gimbal control and add some new button actions for gimbal control

QGC4.4
davidsastresas 12 months ago committed by Julian Oes
parent
commit
78ee54ee91
No known key found for this signature in database
GPG Key ID: F0ED380FEA56DE41
  1. 67
      src/Joystick/Joystick.cc
  2. 9
      src/Joystick/Joystick.h

67
src/Joystick/Joystick.cc

@ -16,6 +16,7 @@
#include "VideoManager.h" #include "VideoManager.h"
#include "QGCCameraManager.h" #include "QGCCameraManager.h"
#include "QGCCameraControl.h" #include "QGCCameraControl.h"
#include "GimbalController.h"
#include <QSettings> #include <QSettings>
@ -64,6 +65,8 @@ const char* Joystick::_buttonActionGimbalUp = QT_TR_NOOP("Gimbal Up");
const char* Joystick::_buttonActionGimbalLeft = QT_TR_NOOP("Gimbal Left"); const char* Joystick::_buttonActionGimbalLeft = QT_TR_NOOP("Gimbal Left");
const char* Joystick::_buttonActionGimbalRight = QT_TR_NOOP("Gimbal Right"); const char* Joystick::_buttonActionGimbalRight = QT_TR_NOOP("Gimbal Right");
const char* Joystick::_buttonActionGimbalCenter = QT_TR_NOOP("Gimbal Center"); const char* Joystick::_buttonActionGimbalCenter = QT_TR_NOOP("Gimbal Center");
const char* Joystick::_buttonActionGimbalYawLock = QT_TR_NOOP("Gimbal Yaw Lock");
const char* Joystick::_buttonActionGimbalYawFollow = QT_TR_NOOP("Gimbal Yaw Follow");
const char* Joystick::_buttonActionEmergencyStop = QT_TR_NOOP("Emergency Stop"); const char* Joystick::_buttonActionEmergencyStop = QT_TR_NOOP("Emergency Stop");
const char* Joystick::_buttonActionGripperGrab = QT_TR_NOOP("Gripper Close"); const char* Joystick::_buttonActionGripperGrab = QT_TR_NOOP("Gripper Close");
const char* Joystick::_buttonActionGripperRelease = QT_TR_NOOP("Gripper Open"); const char* Joystick::_buttonActionGripperRelease = QT_TR_NOOP("Gripper Open");
@ -640,6 +643,7 @@ void Joystick::_handleAxis()
axis = _rgFunctionAxis[throttleFunction]; axis = _rgFunctionAxis[throttleFunction];
float throttle = _adjustRange(_rgAxisValues[axis],_rgCalibration[axis], _throttleMode==ThrottleModeDownZero?false:_deadband); float throttle = _adjustRange(_rgAxisValues[axis],_rgCalibration[axis], _throttleMode==ThrottleModeDownZero?false:_deadband);
// These are only used for printing JoystickValuesLog
float gimbalPitch = 0.0f; float gimbalPitch = 0.0f;
float gimbalYaw = 0.0f; float gimbalYaw = 0.0f;
@ -717,10 +721,10 @@ void Joystick::startPolling(Vehicle* vehicle)
disconnect(this, &Joystick::setArmed, _activeVehicle, &Vehicle::setArmedShowError); disconnect(this, &Joystick::setArmed, _activeVehicle, &Vehicle::setArmedShowError);
disconnect(this, &Joystick::setVtolInFwdFlight, _activeVehicle, &Vehicle::setVtolInFwdFlight); disconnect(this, &Joystick::setVtolInFwdFlight, _activeVehicle, &Vehicle::setVtolInFwdFlight);
disconnect(this, &Joystick::setFlightMode, _activeVehicle, &Vehicle::setFlightMode); disconnect(this, &Joystick::setFlightMode, _activeVehicle, &Vehicle::setFlightMode);
disconnect(this, &Joystick::gimbalPitchStep, _activeVehicle, &Vehicle::gimbalPitchStep); disconnect(this, &Joystick::gimbalYawLock, _activeVehicle->gimbalController(), &GimbalController::gimbalYawLock);
disconnect(this, &Joystick::gimbalYawStep, _activeVehicle, &Vehicle::gimbalYawStep); disconnect(this, &Joystick::centerGimbal, _activeVehicle->gimbalController(), &GimbalController::centerGimbal);
disconnect(this, &Joystick::centerGimbal, _activeVehicle, &Vehicle::centerGimbal); disconnect(this, &Joystick::gimbalPitchStep, _activeVehicle->gimbalController(), &GimbalController::gimbalPitchStep);
disconnect(this, &Joystick::gimbalControlValue, _activeVehicle, &Vehicle::gimbalControlValue); disconnect(this, &Joystick::gimbalYawStep, _activeVehicle->gimbalController(), &GimbalController::gimbalYawStep);
disconnect(this, &Joystick::emergencyStop, _activeVehicle, &Vehicle::emergencyStop); disconnect(this, &Joystick::emergencyStop, _activeVehicle, &Vehicle::emergencyStop);
disconnect(this, &Joystick::gripperAction, _activeVehicle, &Vehicle::setGripperAction); disconnect(this, &Joystick::gripperAction, _activeVehicle, &Vehicle::setGripperAction);
disconnect(this, &Joystick::landingGearDeploy, _activeVehicle, &Vehicle::landingGearDeploy); disconnect(this, &Joystick::landingGearDeploy, _activeVehicle, &Vehicle::landingGearDeploy);
@ -743,10 +747,10 @@ void Joystick::startPolling(Vehicle* vehicle)
connect(this, &Joystick::setArmed, _activeVehicle, &Vehicle::setArmedShowError); connect(this, &Joystick::setArmed, _activeVehicle, &Vehicle::setArmedShowError);
connect(this, &Joystick::setVtolInFwdFlight, _activeVehicle, &Vehicle::setVtolInFwdFlight); connect(this, &Joystick::setVtolInFwdFlight, _activeVehicle, &Vehicle::setVtolInFwdFlight);
connect(this, &Joystick::setFlightMode, _activeVehicle, &Vehicle::setFlightMode); connect(this, &Joystick::setFlightMode, _activeVehicle, &Vehicle::setFlightMode);
connect(this, &Joystick::gimbalPitchStep, _activeVehicle, &Vehicle::gimbalPitchStep); connect(this, &Joystick::gimbalYawLock, _activeVehicle->gimbalController(), &GimbalController::gimbalYawLock);
connect(this, &Joystick::gimbalYawStep, _activeVehicle, &Vehicle::gimbalYawStep); connect(this, &Joystick::centerGimbal, _activeVehicle->gimbalController(), &GimbalController::centerGimbal);
connect(this, &Joystick::centerGimbal, _activeVehicle, &Vehicle::centerGimbal); connect(this, &Joystick::gimbalPitchStep, _activeVehicle->gimbalController(), &GimbalController::gimbalPitchStep);
connect(this, &Joystick::gimbalControlValue, _activeVehicle, &Vehicle::gimbalControlValue); connect(this, &Joystick::gimbalYawStep, _activeVehicle->gimbalController(), &GimbalController::gimbalYawStep);
connect(this, &Joystick::emergencyStop, _activeVehicle, &Vehicle::emergencyStop); connect(this, &Joystick::emergencyStop, _activeVehicle, &Vehicle::emergencyStop);
connect(this, &Joystick::gripperAction, _activeVehicle, &Vehicle::setGripperAction); connect(this, &Joystick::gripperAction, _activeVehicle, &Vehicle::setGripperAction);
connect(this, &Joystick::landingGearDeploy, _activeVehicle, &Vehicle::landingGearDeploy); connect(this, &Joystick::landingGearDeploy, _activeVehicle, &Vehicle::landingGearDeploy);
@ -767,10 +771,10 @@ void Joystick::stopPolling(void)
disconnect(this, &Joystick::setArmed, _activeVehicle, &Vehicle::setArmedShowError); disconnect(this, &Joystick::setArmed, _activeVehicle, &Vehicle::setArmedShowError);
disconnect(this, &Joystick::setVtolInFwdFlight, _activeVehicle, &Vehicle::setVtolInFwdFlight); disconnect(this, &Joystick::setVtolInFwdFlight, _activeVehicle, &Vehicle::setVtolInFwdFlight);
disconnect(this, &Joystick::setFlightMode, _activeVehicle, &Vehicle::setFlightMode); disconnect(this, &Joystick::setFlightMode, _activeVehicle, &Vehicle::setFlightMode);
disconnect(this, &Joystick::gimbalPitchStep, _activeVehicle, &Vehicle::gimbalPitchStep); disconnect(this, &Joystick::gimbalYawLock, _activeVehicle->gimbalController(), &GimbalController::gimbalYawLock);
disconnect(this, &Joystick::gimbalYawStep, _activeVehicle, &Vehicle::gimbalYawStep); disconnect(this, &Joystick::centerGimbal, _activeVehicle->gimbalController(), &GimbalController::centerGimbal);
disconnect(this, &Joystick::centerGimbal, _activeVehicle, &Vehicle::centerGimbal); disconnect(this, &Joystick::gimbalPitchStep, _activeVehicle->gimbalController(), &GimbalController::gimbalPitchStep);
disconnect(this, &Joystick::gimbalControlValue, _activeVehicle, &Vehicle::gimbalControlValue); disconnect(this, &Joystick::gimbalYawStep, _activeVehicle->gimbalController(), &GimbalController::gimbalYawStep);
disconnect(this, &Joystick::gripperAction, _activeVehicle, &Vehicle::setGripperAction); disconnect(this, &Joystick::gripperAction, _activeVehicle, &Vehicle::setGripperAction);
disconnect(this, &Joystick::landingGearDeploy, _activeVehicle, &Vehicle::landingGearDeploy); disconnect(this, &Joystick::landingGearDeploy, _activeVehicle, &Vehicle::landingGearDeploy);
disconnect(this, &Joystick::landingGearRetract, _activeVehicle, &Vehicle::landingGearRetract); disconnect(this, &Joystick::landingGearRetract, _activeVehicle, &Vehicle::landingGearRetract);
@ -1050,21 +1054,21 @@ void Joystick::_executeButtonAction(const QString& action, bool buttonDown)
} else if(action == _buttonActionToggleVideoRecord) { } else if(action == _buttonActionToggleVideoRecord) {
if (buttonDown) emit toggleVideoRecord(); if (buttonDown) emit toggleVideoRecord();
} else if(action == _buttonActionGimbalUp) { } else if(action == _buttonActionGimbalUp) {
if (buttonDown) _pitchStep(1); if (buttonDown) emit gimbalPitchStep(1);
} else if(action == _buttonActionGimbalDown) { } else if(action == _buttonActionGimbalDown) {
if (buttonDown) _pitchStep(-1); if (buttonDown) emit gimbalPitchStep(-1);
} else if(action == _buttonActionGimbalLeft) { } else if(action == _buttonActionGimbalLeft) {
if (buttonDown) _yawStep(-1); if (buttonDown) emit gimbalYawStep(-1);
} else if(action == _buttonActionGimbalRight) { } else if(action == _buttonActionGimbalRight) {
if (buttonDown) _yawStep(1); if (buttonDown) emit gimbalYawStep(1);
} else if(action == _buttonActionGimbalCenter) { } else if(action == _buttonActionGimbalCenter) {
if (buttonDown) { if (buttonDown) emit centerGimbal();
_localPitch = 0.0; } else if(action == _buttonActionGimbalYawLock) {
_localYaw = 0.0; if (buttonDown) emit gimbalYawLock(true);
emit gimbalControlValue(0.0, 0.0); } else if(action == _buttonActionGimbalYawFollow) {
} if (buttonDown) emit gimbalYawLock(false);
} else if(action == _buttonActionEmergencyStop) { } else if(action == _buttonActionEmergencyStop) {
if(buttonDown) emit emergencyStop(); if (buttonDown) emit emergencyStop();
} else if(action == _buttonActionGripperGrab) { } else if(action == _buttonActionGripperGrab) {
if(buttonDown) { if(buttonDown) {
emit gripperAction(GRIPPER_ACTION_GRAB); emit gripperAction(GRIPPER_ACTION_GRAB);
@ -1089,23 +1093,6 @@ void Joystick::_executeButtonAction(const QString& action, bool buttonDown)
} }
} }
void Joystick::_pitchStep(int direction)
{
_localPitch += static_cast<double>(direction);
//-- Arbitrary range
if(_localPitch < -90.0) _localPitch = -90.0;
if(_localPitch > 35.0) _localPitch = 35.0;
emit gimbalControlValue(_localPitch, _localYaw);
}
void Joystick::_yawStep(int direction)
{
_localYaw += static_cast<double>(direction);
if(_localYaw < -180.0) _localYaw = -180.0;
if(_localYaw > 180.0) _localYaw = 180.0;
emit gimbalControlValue(_localPitch, _localYaw);
}
bool Joystick::_validAxis(int axis) const bool Joystick::_validAxis(int axis) const
{ {
if(axis >= 0 && axis < _axisCount) { if(axis >= 0 && axis < _axisCount) {
@ -1168,6 +1155,8 @@ void Joystick::_buildActionList(Vehicle* activeVehicle)
_assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalLeft, true)); _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalLeft, true));
_assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalRight, true)); _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalRight, true));
_assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalCenter)); _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalCenter));
_assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalYawLock));
_assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGimbalYawFollow));
_assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionEmergencyStop)); _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionEmergencyStop));
_assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGripperGrab)); _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGripperGrab));
_assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGripperRelease)); _assignableButtonActions.append(new AssignableButtonAction(this, _buttonActionGripperRelease));

9
src/Joystick/Joystick.h

@ -213,7 +213,7 @@ signals:
void gimbalPitchStep (int direction); void gimbalPitchStep (int direction);
void gimbalYawStep (int direction); void gimbalYawStep (int direction);
void centerGimbal (); void centerGimbal ();
void gimbalControlValue (double pitch, double yaw); void gimbalYawLock (bool lock);
void setArmed (bool arm); void setArmed (bool arm);
void setVtolInFwdFlight (bool set); void setVtolInFwdFlight (bool set);
void setFlightMode (const QString& flightMode); void setFlightMode (const QString& flightMode);
@ -236,11 +236,6 @@ protected:
void _handleButtons (); void _handleButtons ();
void _buildActionList (Vehicle* activeVehicle); void _buildActionList (Vehicle* activeVehicle);
void _pitchStep (int direction);
void _yawStep (int direction);
double _localYaw = 0.0;
double _localPitch = 0.0;
private: private:
virtual bool _open () = 0; virtual bool _open () = 0;
virtual void _close () = 0; virtual void _close () = 0;
@ -355,6 +350,8 @@ private:
static const char* _buttonActionGimbalLeft; static const char* _buttonActionGimbalLeft;
static const char* _buttonActionGimbalRight; static const char* _buttonActionGimbalRight;
static const char* _buttonActionGimbalCenter; static const char* _buttonActionGimbalCenter;
static const char* _buttonActionGimbalYawLock;
static const char* _buttonActionGimbalYawFollow;
static const char* _buttonActionEmergencyStop; static const char* _buttonActionEmergencyStop;
static const char* _buttonActionGripperGrab; static const char* _buttonActionGripperGrab;
static const char* _buttonActionGripperRelease; static const char* _buttonActionGripperRelease;

Loading…
Cancel
Save