|
adding center off range to joystick control Greg [2 posts] |
13 year
|
I am controlling an ROV with a USB Attack 3 Joystick to a Pololu Maestro controller. I have good control of the sliders but I need to have a small deadband around the center position of 1500 . The joystick does not return to dead center on release but is somewhere around 50 + or -. For good control it is critical the motors controlling left, right, forward and back stop on joystick release. I was thinking that an IF statement for joystick position of 1450 to 1550 to set servo to 1500 (center-off) then use an else statement for anything outside that range to operate normally. I am very new to programming. To control the slider position now I am using the following: SetVariable "sfor_back", GetVariable ("jfor_back") + 1500. Everything I have tried for the if statement has failed to function. Any help would be greatly appreciated.
|
|
|
Anonymous |
13 year
|
Greg,
it may be easier if you post you entire VBScript. It should be something along the lines of:
jforBack = GetVariable("jfor_back")
if jforBack > 1450 and jforBack < 1550 then
SetVariable "sfor_back", 1500
else
SetVariable "sfor_back", jforBack
end if
STeven.
|
|
|
John Cabrer from United States [13 posts] |
13 year
|
When implementing a DEADBAND filter for joysticks, you have to consider that any value outside the deadband area (usually a square) has to be scaled back to 1 or 0.
In pseudo-code, assuming that the joystick value ranges for X and Y axis are -32767 to 32767, and a deadband of +/-1500, looks something like this
DEADBAND=1500
SCALING_X = 0.9542236328125 // (32768-1500)/32768
SCALING_Y = 0.9542236328125
JOYSTICK_X = GET_JOYSTICK_X()
JOYSTICK_Y = GET_JOYSTICK_Y()
// Coerce joystick values inside deadband area, otherwise ignore
if JOYSTICK_X >= -1500 and JOYSTICK_X <= 1500 then
JOYSTICK_X = 0;
if JOYSTICK_Y >= -1500 and JOYSTICK_Y <= 1500 then
JOYSTICK_Y = 0;
JOYSTICK_X_SCALED = JOYSTICK_X * SCALING_X
JOYSTICK_Y_SCALED = JOYSTICK_Y * SCALING_Y
This should effectively remove a chunk of sensitivity from the joystick near the center position, but still allow you to send the full dynamic range of the joystick without a sudden jerky move when the thing goes from 0 straight to 1500.
|
|
|
Greg [2 posts] |
13 year
|
I will give both of these options a try, hopefully one will work for me, if not I will post what I have tried previously. Thanks again for the help
|
|