Go to Post Skill in software engineering is all about algorithmic understanding and intuition. Implemenation is an important, but ultimately secondary, concern. Programming languages are more or less arbitrary. - phrontist [more]
Home
Go Back   Chief Delphi > Technical > Programming > NI LabVIEW
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 15-02-2015, 15:31
Levansic's Avatar
Levansic Levansic is offline
Registered User
AKA: Len Evansic
FRC #0585 (Cyber Penguins)
Team Role: Mentor
 
Join Date: Jan 2012
Rookie Year: 2008
Location: Tehachapi, CA
Posts: 185
Levansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud of
Re: Use a button to make a motor move a certain number of rotations

You would put it as an input to the drive (where you have it), but you have to have the drive motors properly configured. One other thing, is that you need a little more logic to latch the value. The Teleop.vi runs approximately every 20 ms. As soon as you let go of the button, your input will be to drive the motor back to the 0 position. This isn't what you want.

If you intend to drive your robot completely with position commands, you will need a state machine that keeps track of the current values, incrementing and decrementing the intended position.

It is much easier to drive in speed or voltage mode.
Reply With Quote
  #2   Spotlight this post!  
Unread 15-02-2015, 15:40
RoboBucs RoboBucs is offline
Registered User
FRC #5005
 
Join Date: Jan 2015
Location: Chattanooga, TN
Posts: 69
RoboBucs is an unknown quantity at this point
Re: Use a button to make a motor move a certain number of rotations

Quote:
Originally Posted by Levansic View Post
You would put it as an input to the drive (where you have it), but you have to have the drive motors properly configured. One other thing, is that you need a little more logic to latch the value. The Teleop.vi runs approximately every 20 ms. As soon as you let go of the button, your input will be to drive the motor back to the 0 position. This isn't what you want.

If you intend to drive your robot completely with position commands, you will need a state machine that keeps track of the current values, incrementing and decrementing the intended position.

It is much easier to drive in speed or voltage mode.
It won't be completely, it's only with this specific arm, we can use joystick movement for it rather than buttons, it would just be easier for our driver to put a button and have the motors move that amount for that arm every single time. I also have 2 questions, what do you mean by speed or voltage mode and what's wrong with the way I have the drive motors configured? It's probably something stupid, I'm still used to using unbundle by name for buttons from last year rather than arrays, thank you so much for your help so far!
Reply With Quote
  #3   Spotlight this post!  
Unread 15-02-2015, 16:03
RoboBucs RoboBucs is offline
Registered User
FRC #5005
 
Join Date: Jan 2015
Location: Chattanooga, TN
Posts: 69
RoboBucs is an unknown quantity at this point
Re: Use a button to make a motor move a certain number of rotations

Ok I think I'm starting to understand this, so would I put the 7475 number as distance per count in begin for the encoder? Past that I'm not sure how I can assign a button to work under that motor count for the encoder and the motor in teleop
Reply With Quote
  #4   Spotlight this post!  
Unread 15-02-2015, 16:07
Levansic's Avatar
Levansic Levansic is offline
Registered User
AKA: Len Evansic
FRC #0585 (Cyber Penguins)
Team Role: Mentor
 
Join Date: Jan 2012
Rookie Year: 2008
Location: Tehachapi, CA
Posts: 185
Levansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud of
Re: Use a button to make a motor move a certain number of rotations

Can you post the snippet of code from Begin.vi where you setup these motors?
Reply With Quote
  #5   Spotlight this post!  
Unread 15-02-2015, 16:10
RoboBucs RoboBucs is offline
Registered User
FRC #5005
 
Join Date: Jan 2015
Location: Chattanooga, TN
Posts: 69
RoboBucs is an unknown quantity at this point
Re: Use a button to make a motor move a certain number of rotations

Quote:
Originally Posted by Levansic View Post
Can you post the snippet of code from Begin.vi where you setup these motors?
Reply With Quote
  #6   Spotlight this post!  
Unread 15-02-2015, 16:17
RoboBucs RoboBucs is offline
Registered User
FRC #5005
 
Join Date: Jan 2015
Location: Chattanooga, TN
Posts: 69
RoboBucs is an unknown quantity at this point
Re: Use a button to make a motor move a certain number of rotations

Quote:
Originally Posted by Levansic View Post
Can you post the snippet of code from Begin.vi where you setup these motors?
Would I have to set it up like this? (I just forgot to rename the second encoder in begin)


Reply With Quote
  #7   Spotlight this post!  
Unread 15-02-2015, 16:27
Levansic's Avatar
Levansic Levansic is offline
Registered User
AKA: Len Evansic
FRC #0585 (Cyber Penguins)
Team Role: Mentor
 
Join Date: Jan 2012
Rookie Year: 2008
Location: Tehachapi, CA
Posts: 185
Levansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud of
Re: Use a button to make a motor move a certain number of rotations

Your snippets are illuminating.

OK, here's the rest of the story. Unfortunately, you won't have a simple way of just sending a number to the motor controller, as you are using PWM Victors, which have no understanding of encoders or close loop modes.

You will need to implement a PID control in LabView, where the encoder inputs are compared to your desired position. The outputs will drive the motor voltages up and down, until the desired position is realized.

LabView has several built-in PID functions, and there are many threads here about how to use them.
Reply With Quote
  #8   Spotlight this post!  
Unread 15-02-2015, 16:37
Ether's Avatar
Ether Ether is offline
systems engineer (retired)
no team
 
Join Date: Nov 2009
Rookie Year: 1969
Location: US
Posts: 8,065
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: Use a button to make a motor move a certain number of rotations

Quote:
Originally Posted by Levansic View Post
Your snippets are illuminating.
They're not snippets. They're just screenshots.
Reply With Quote
  #9   Spotlight this post!  
Unread 15-02-2015, 16:42
Levansic's Avatar
Levansic Levansic is offline
Registered User
AKA: Len Evansic
FRC #0585 (Cyber Penguins)
Team Role: Mentor
 
Join Date: Jan 2012
Rookie Year: 2008
Location: Tehachapi, CA
Posts: 185
Levansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud of
Re: Use a button to make a motor move a certain number of rotations

Quote:
Originally Posted by Ether View Post
They're not snippets. They're just screenshots.
You are quite correct. Those chunks of screenshot carry the same human-readable info, which is what I was after.
Reply With Quote
  #10   Spotlight this post!  
Unread 15-02-2015, 16:42
RoboBucs RoboBucs is offline
Registered User
FRC #5005
 
Join Date: Jan 2015
Location: Chattanooga, TN
Posts: 69
RoboBucs is an unknown quantity at this point
Re: Use a button to make a motor move a certain number of rotations

Quote:
Originally Posted by Levansic View Post
Your snippets are illuminating.

OK, here's the rest of the story. Unfortunately, you won't have a simple way of just sending a number to the motor controller, as you are using PWM Victors, which have no understanding of encoders or close loop modes.

You will need to implement a PID control in LabView, where the encoder inputs are compared to your desired position. The outputs will drive the motor voltages up and down, until the desired position is realized.

LabView has several built-in PID functions, and there are many threads here about how to use them.
How do they have no way of understanding encoders if the encoders are built in?
Reply With Quote
  #11   Spotlight this post!  
Unread 15-02-2015, 16:52
Levansic's Avatar
Levansic Levansic is offline
Registered User
AKA: Len Evansic
FRC #0585 (Cyber Penguins)
Team Role: Mentor
 
Join Date: Jan 2012
Rookie Year: 2008
Location: Tehachapi, CA
Posts: 185
Levansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud of
Re: Use a button to make a motor move a certain number of rotations

Quote:
Originally Posted by RoboBucs View Post
How do they have no way of understanding encoders if the encoders are built in?
Encoders, built in or otherwise, have to plug into something that can understand their signals. The Victors have no such facility. They are not "intelligent", meaning they don't take any external feedback.

The motors themselves don't have any intelligence. Their inputs are only the voltage applied to the wires. The encoders are not linked in any way to the windings in the motor.

You have setup some DIO channels to take the A and B data from the encoders. This information goes straight into the roboRio, which has to do something with it, to control the input to the victors. The roboRio is the brain in this case.

The new Talon SRX's are intelligent, and can do the work onboard with no involvement of the roboRio. The older Jaguars had promise of this, but in practice, they rarely worked as designed for encoder-driven closed loop feedback. I have trouble finding the right words to describe how much I LOVE the Talon SRX's closed loop modes.
Reply With Quote
  #12   Spotlight this post!  
Unread 15-02-2015, 16:56
RoboBucs RoboBucs is offline
Registered User
FRC #5005
 
Join Date: Jan 2015
Location: Chattanooga, TN
Posts: 69
RoboBucs is an unknown quantity at this point
Re: Use a button to make a motor move a certain number of rotations

Quote:
Originally Posted by Levansic View Post
Encoders, built in or otherwise, have to plug into something that can understand their signals. The Victors have no such facility. They are not "intelligent", meaning they don't take any external feedback.

The motors themselves don't have any intelligence. Their inputs are only the voltage applied to the wires. The encoders are not linked in any way to the windings in the motor.

You have setup some DIO channels to take the A and B data from the encoders. This information goes straight into the roboRio, which has to do something with it, to control the input to the victors. The roboRio is the brain in this case.

The new Talon SRX's are intelligent, and can do the work onboard with no involvement of the roboRio. The older Jaguars had promise of this, but in practice, they rarely worked as designed for encoder-driven closed loop feedback. I have trouble finding the right words to describe how much I LOVE the Talon SRX's closed loop modes.
Man this stuff is so beyond my level of experience with this stuff. I may just have to work this with the joystick like we have been so far, unless you have some way around this:/
Reply With Quote
  #13   Spotlight this post!  
Unread 15-02-2015, 16:58
RoboBucs RoboBucs is offline
Registered User
FRC #5005
 
Join Date: Jan 2015
Location: Chattanooga, TN
Posts: 69
RoboBucs is an unknown quantity at this point
Re: Use a button to make a motor move a certain number of rotations

Quote:
Originally Posted by RoboBucs View Post
Man this stuff is so beyond my level of experience with this stuff. I may just have to work this with the joystick like we have been so far, unless you have some way around this:/
Ok, I think we're just gonna have it where when we press the button it will just run for however long we need it to run, will that work?
Reply With Quote
  #14   Spotlight this post!  
Unread 15-02-2015, 17:57
RoboBucs RoboBucs is offline
Registered User
FRC #5005
 
Join Date: Jan 2015
Location: Chattanooga, TN
Posts: 69
RoboBucs is an unknown quantity at this point
Exclamation Re: Use a button to make a motor move a certain number of rotations

Quote:
Originally Posted by Levansic View Post
Encoders, built in or otherwise, have to plug into something that can understand their signals. The Victors have no such facility. They are not "intelligent", meaning they don't take any external feedback.

The motors themselves don't have any intelligence. Their inputs are only the voltage applied to the wires. The encoders are not linked in any way to the windings in the motor.

You have setup some DIO channels to take the A and B data from the encoders. This information goes straight into the roboRio, which has to do something with it, to control the input to the victors. The roboRio is the brain in this case.

The new Talon SRX's are intelligent, and can do the work onboard with no involvement of the roboRio. The older Jaguars had promise of this, but in practice, they rarely worked as designed for encoder-driven closed loop feedback. I have trouble finding the right words to describe how much I LOVE the Talon SRX's closed loop modes.
Do you know any realistic way that I could make this work with the encoder? I honestly don't have the slightest clue about anything to do with PIDs. All I need it to do it run an exact amount of rotations each time, there has to be some way to do it, could I maybe use a case structure?

Last edited by RoboBucs : 15-02-2015 at 18:01.
Reply With Quote
  #15   Spotlight this post!  
Unread 16-02-2015, 00:25
Levansic's Avatar
Levansic Levansic is offline
Registered User
AKA: Len Evansic
FRC #0585 (Cyber Penguins)
Team Role: Mentor
 
Join Date: Jan 2012
Rookie Year: 2008
Location: Tehachapi, CA
Posts: 185
Levansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud ofLevansic has much to be proud of
Re: Use a button to make a motor move a certain number of rotations

OK, there are a few things that you can do to get it pretty close without doing a full PID. No matter what, you need to get your logic right, which means that pressing a button will toggle a persistent state. You need to flop between deployed and not deployed, and the state has to be retained from one pass through your code to the next. Feedback nodes (at the bottom of the structures palette) are helpful for this. After you get this worked out, this logic can switch your case structure (or selects) to start moving in the right direction.

Once you have that part figured out, you can use the PID vi's that are included in LabView. Since the output shaft is so slow relative to the count, you can probably get away with using only a well-chosen P gain, setting the I and D to zero.

If you don't want to use the PID function, you can implement the P part on your own. Basically, you calculate the difference between where you are (current encoder count) and where you want to be (final encoder count), and multiply this number by the P gain that you choose. This number is then fed to the motor set vi.

As you approach the desired final encoder count (called the setpoint), the resulting number will get smaller, and the motor will slow, eventually stopping.

If your P gain is set too low, it will never reach the setpoint as the commanded voltage will eventually not be enough to move the motor. If the P gain is too high, the motor will oscillate about the setpoint. Because of this, you could purposefully choose a P that is slightly too low, and bump up your setpoint to a number that lets your motor rest where you want it to end up.

This last paragraph is an adequate way to accomplish your goals, only because your design is essentially toggling between two points. You fudge the setpoint numbers for deploy and retract, until it acts the way you want it to. This may not be viewed as the correct way from a control system perspective, but it will be good enough.
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 10:21.

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