Skip to content

Conversation

@Niki-dev12
Copy link
Contributor

Title:

Add QML-configurable gimbal max speed and yaw/pitch deadzone settings

Description

This PR adds new joystick configuration features to allow runtime adjustment of:
Gimbal pitch and yaw max speed, using a single gimbalMaxSpeed parameter exposed to QML
Deadzone control for pitch and yaw gimbal axes via gimbalPitchDeadzone and gimbalYawDeadzone
Enable/disable axis-based gimbal control (gimbalAxisEnabled)

This allows users to fine-tune gimbal behavior without recompiling, which is especially useful when mapping joystick axes for dynamic camera control.

Changes include:

Q_PROPERTY bindings for the three settings
Persistent saving and loading through _saveSettings() and _loadSettings()
Updated _handleAxis() to apply speed scaling and deadzone filtering
Optional offset for gimbal pitch and yaw to avoid zero drift

Test Steps

Launch QGC with a joystick connected
Use a QML debug view or a settings panel to:
    Set gimbalMaxSpeed (e.g., 30–160)
    Adjust gimbalPitchDeadzone or gimbalYawDeadzone
    Toggle gimbalAxisEnabled
Observe how gimbal responsiveness changes accordingly
Confirm values persist between sessions

Tested in:

Real drone running ardupilot with gimbal
Ubuntu 22 and Zorro 

Checklist:

Related Issue

By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.

@Niki-dev12 Niki-dev12 force-pushed the feature/gimbal-max-speed branch from 9546ecf to 9b14afc Compare August 11, 2025 08:10
@HTRamsey
Copy link
Collaborator

Could you look at the GimbalController and see if you can use that instead of changing Vehicle?

Comment on lines 688 to 708
static int zeroPitchCount = 0;
static int zeroYawCount = 0;

if (std::abs(gimbalPitchOut) == 0) {
zeroPitchCount++;
} else {
zeroPitchCount = 0;
}

if (std::abs(gimbalYawOut) == 0) {
zeroYawCount++;
} else {
zeroYawCount = 0;
}

if (zeroPitchCount >= 3 && zeroYawCount >= 3) {

}else{
_activeVehicle->sendGimbalAbsolutePosition(gimbalPitchOut, gimbalYawOut);
// qDebug() << gimbalYawOut << gimbalPitchOut;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a bit weird. Can you add a comment how it works. And also remove avoid the empty if clause.

And don't use static there but instead it should be a class member variable.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I gonna fix the static. I use this code to stop overflowing MAVLink messages to the gimbal.
Without it QGroundControl cannot use the onscreen gimbal control.
When the slider is in the neutral / 0 position, the code stops sending gimbal commands.
The slider goes to neutral when you release it, because a spring centers it.
This prevents spamming the gimbal with useless "zero movement" commands when the stick is centered.

Copy link
Contributor

@julianoes julianoes left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is starting to look good.

Have you thought about the case where we don't have control over the gimbal yet and need to acquire it?

@Niki-dev12
Copy link
Contributor Author

This is starting to look good.

Have you thought about the case where we don't have control over the gimbal yet and need to acquire it?

I suggest handling this in a follow up PR, since it feels a bit out of scope for the changes in this one.

@HTRamsey
Copy link
Collaborator

HTRamsey commented Oct 10, 2025

Could you remove the extra .txt & .cmake files?

@Niki-dev12
Copy link
Contributor Author

Could you remove the extra .txt & .cmake files?

Yes I will do that. Thanks for pointing it out.

@DonLakeFlyer
Copy link
Contributor

So I've been going through the state of Joystick Config/Calibration. It's quite a mess and needs a consistent rework. I'm going to do that in the next couple days which is gonna hammer this pull. I'll take care of it myself though by integrating.modifying your work into the new code. So leave this open for now. And I'll pull code from it and move it to the new stuff as I make progress.

@Niki-dev12
Copy link
Contributor Author

So I've been going through the state of Joystick Config/Calibration. It's quite a mess and needs a consistent rework. I'm going to do that in the next couple days which is gonna hammer this pull. I'll take care of it myself though by integrating.modifying your work into the new code. So leave this open for now. And I'll pull code from it and move it to the new stuff as I make progress.

Thanks a lot for the update. I will leave the PR open as suggested and will follow your progress.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants