Go to Post I will follow FIRST's guidelines, as long as they conform with those of the English language. - artdutra04 [more]
Home
Go Back   Chief Delphi > Technical > Programming > Java
CD-Media   CD-Spy  
portal register members calendar search Today's Posts Mark Forums Read FAQ rules

 
Reply
 
Thread Tools Rate Thread Display Modes
  #1   Spotlight this post!  
Unread 08-10-2012, 01:24
techkid86's Avatar
techkid86 techkid86 is offline
Magic Programer
FRC #3044 (0xBE4)
Team Role: Alumni
 
Join Date: Jan 2011
Rookie Year: 2010
Location: ballston spa
Posts: 58
techkid86 is an unknown quantity at this point
Re: How do I program a joystick deadband?

Allow me to show you a piece of code my team has used the last three years....


public double deadband(double JoystickValue, double DeadbandCutOff) {
if (JoystickValue<DeadbandCutOff&&JoystickValue>(Dead bandCutOff*(-1))) {
deadbandreturn=0;
}
else {
deadbandreturn=(JoystickValue-(Math.abs(JoystickValue)/JoystickValue*DeadbandCutOff))/(1-DeadbandCutOff);
}

return deadbandreturn;
}

this not only cuts it off at a point, but prevents jumping up to 0.1 after you get past it. it basically smooths the dead band curve. How ever, i would recommend making a algorithm you understand. ((i am still working on understanding this one. lol))
__________________
"you can build a perfect machine out of imperfect parts" -Urza

Last edited by techkid86 : 08-10-2012 at 01:31.
Reply With Quote
  #2   Spotlight this post!  
Unread 08-10-2012, 11:07
Ginto8's Avatar
Ginto8 Ginto8 is offline
Programming Lead
AKA: Joe Doyle
FRC #2729 (Storm)
Team Role: Programmer
 
Join Date: Oct 2010
Rookie Year: 2010
Location: Marlton, NJ
Posts: 174
Ginto8 is a glorious beacon of lightGinto8 is a glorious beacon of lightGinto8 is a glorious beacon of lightGinto8 is a glorious beacon of lightGinto8 is a glorious beacon of light
Re: How do I program a joystick deadband?

Quote:
Originally Posted by techkid86 View Post
public double deadband(double JoystickValue, double DeadbandCutOff) {
if (JoystickValue<DeadbandCutOff&&JoystickValue>(Dead bandCutOff*(-1))) {
deadbandreturn=0;
}
else {
deadbandreturn=(JoystickValue-(Math.abs(JoystickValue)/JoystickValue*DeadbandCutOff))/(1-DeadbandCutOff);
}

return deadbandreturn;
}
That's actually some pretty clever code... I'd like to put that on our robot this year, if you're okay with that.

To anyone confused:
The first if() checks if the joystick value is in the (-deadband,deadband) range (this could more succinctly be done with Math.abs(JoystickValue) < deadband), and if so, puts the output to 0. Otherwise, it scales the joystick value to [0,1] or [-1,0] depending on the sign by modifying the ranges this way:
[deadband,1] -> [0,1-deadband] -> [0,1]
[-1,-deadband] -> [-1+deadband,0] -> [-1,0]

Code:
deadbandreturn=(JoystickValue- // initially in one of two ranges: [DeadbandCutOff,1] or [-1,-DeadBandCutOff]
                (Math.abs(JoystickValue)/JoystickValue // 1 if JoystickValue > 0, -1 if JoystickValue < 0 (abs(x)/x); could use Math.signum(JoystickValue) instead
                 *DeadbandCutOff // multiply by the sign so that for >0, it comes out to - (DeadBandCutOff), and for <0 it comes to - (-DeadBandCutOff)
                )
               ) // now in either [0,1-DeadBandCutOff] or [-1+DeadBandCutOff,0]
               /(1-DeadbandCutOff); // scale to [0,1] or [-1,0]

Last edited by Ginto8 : 08-10-2012 at 12:13.
Reply With Quote
  #3   Spotlight this post!  
Unread 08-10-2012, 12:41
Ether's Avatar
Ether Ether is offline
systems engineer (retired)
no team
 
Join Date: Nov 2009
Rookie Year: 1969
Location: US
Posts: 8,042
Ether has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond reputeEther has a reputation beyond repute
Re: How do I program a joystick deadband?

Quote:
Originally Posted by Ginto8 View Post
Otherwise, it scales the joystick value to [0,1] or [-1,0]
There's deadband in the motor controller too.


Reply With Quote
  #4   Spotlight this post!  
Unread 17-10-2012, 16:27
CodeYeti's Avatar
CodeYeti CodeYeti is offline
FRC Addict
AKA: Matt Coffin
FRC #0662 (Rocky Mountain Robotics)
Team Role: Mentor
 
Join Date: Feb 2011
Rookie Year: 2010
Location: Colorado
Posts: 81
CodeYeti is an unknown quantity at this point
Re: How do I program a joystick deadband?

Personally, the best way I can think of to go about this would be to extend the Joystick class, making a DeadbandJoystick class. I'll write up an example of what I'm talking about when I get home tonight.
Reply With Quote
Reply


Thread Tools
Display Modes Rate This Thread
Rate This Thread:

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT -5. The time now is 09:14.

The Chief Delphi Forums are sponsored by Innovation First International, Inc.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Copyright © Chief Delphi