Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   NI LabVIEW (http://www.chiefdelphi.com/forums/forumdisplay.php?f=182)
-   -   LabView code of other teams ? (http://www.chiefdelphi.com/forums/showthread.php?t=125155)

eren96 24-01-2014 09:27

LabView code of other teams ?
 
Hi,

My main role in the team is programming and I've been learning labview for a few weeks. I have read many pdf s and watched tutorials, but the way how i'm going to program our robot isn't enough clear in my mind yet. I need to control 2 super shifters with 4 CIM in drive train, 2 pneumatics pistols and 2 CIM in other systems. All systems is going to run in Autonomous Mode as well.

I think If I had some example robot codes from past years including controls like above, It would be great to understand and make other things clear in my mind. Any help would be ok.

Thanks from now.

Invictus3593 24-01-2014 09:38

Re: LabView code of other teams ?
 
If you do a quick search on this site, you can find Team Titanium's code from last year. They used a lot more than what you're using, but they did a really good job all around, especially their autonomous mode. :yikes:

Alpha Beta 24-01-2014 12:28

Re: LabView code of other teams ?
 
Quote:

Originally Posted by eren96 (Post 1331648)
Hi,

My main role in the team is programming and I've been learning labview for a few weeks. I have read many pdf s and watched tutorials, but the way how i'm going to program our robot isn't enough clear in my mind yet. I need to control 2 super shifters with 4 CIM in drive train, 2 pneumatics pistols and 2 CIM in other systems. All systems is going to run in Autonomous Mode as well.

I think If I had some example robot codes from past years including controls like above, It would be great to understand and make other things clear in my mind. Any help would be ok.

Thanks from now.

http://www.chiefdelphi.com/media/papers/2874

In BEGIN you'll see how to start single and double action solenoids as well as how to set-up a 4 motor drive.

In FINISH you'll see how to end each of those things.

In TELEOP we just read the state of our driver controls and write them to global variables. We used button 3 for shifting and button 2 to control our arm moving up and down. We also read the X and Y joystick axis to pass along to our drive loop.

In PERIODIC TASKS/TIMED TASKS you'll find us reading the global variables. The X and Y joystick variables are read in the drive loop. You can ignore the logic involving the "SkySwitch".

When reading the button 3 variable you'll notice some logic used to toggle so the driver doesn't have to keep the button pressed to stay shifted. Ignore the "shift overide" logic. After the toggle we set the state of the solenoid. Single action solenoids are set to either off or on.

Our appendage on button 2 is set up in a similar fashion with a toggle. Again, you can ignore the intermediate logic. You'll notice that the double action solenoid is set to either forward or reverse instead of off or on.

During AUTONOMOUS we write to the same global variables that the driver's controls write to during teleop. If we wanted to lower the appendage we would write button 2 to true which simulates a driver button press. To raise the appendage we have to write it false (simulating the driver releasing the button) than write it true again (switching the output state of the toggle).

eren96 25-01-2014 06:52

Re: LabView code of other teams ?
 
Quote:

Originally Posted by Alpha Beta (Post 1331684)
http://www.chiefdelphi.com/media/papers/2874

In BEGIN you'll see how to start single and double action solenoids as well as how to set-up a 4 motor drive.

In FINISH you'll see how to end each of those things.

In TELEOP we just read the state of our driver controls and write them to global variables. We used button 3 for shifting and button 2 to control our arm moving up and down. We also read the X and Y joystick axis to pass along to our drive loop.

In PERIODIC TASKS/TIMED TASKS you'll find us reading the global variables. The X and Y joystick variables are read in the drive loop. You can ignore the logic involving the "SkySwitch".

When reading the button 3 variable you'll notice some logic used to toggle so the driver doesn't have to keep the button pressed to stay shifted. Ignore the "shift overide" logic. After the toggle we set the state of the solenoid. Single action solenoids are set to either off or on.

Our appendage on button 2 is set up in a similar fashion with a toggle. Again, you can ignore the intermediate logic. You'll notice that the double action solenoid is set to either forward or reverse instead of off or on.

During AUTONOMOUS we write to the same global variables that the driver's controls write to during teleop. If we wanted to lower the appendage we would write button 2 to true which simulates a driver button press. To raise the appendage we have to write it false (simulating the driver releasing the button) than write it true again (switching the output state of the toggle).

wow, that is really helpful, thank you.

I read something regarding using global variables and it was saying that using a lot global variables may cause lags on your cRIO. We have FRC cRIO with 8 slots and as far as i know its ram is half of the cRIO with 4 slots. Should we avoid using them or it's not a big problem?

Did you use a custom dashboard to view the speed using encoders? We have encoders on shifters and we don't need them specifically, but we want to use them to view our speed on dashboard.

btw, what is the purpose of using "WPIEnhanced IOSet Ehanced digital config vi", i didn't understand those part in the begin.vi exactly.

Thanks again.

Greg McKaskle 25-01-2014 08:58

Re: LabView code of other teams ?
 
Globals have a bad reputation. If used properly, they are fine, and often the best and most efficient method of sharing data. If used improperly, they will cause race conditions. Because they also represent a data copy operation, they can cause lag, but so will most other sharing mechanisms.

Simply opening the encoder and configuring it will make it available on the LV dashboard in test mode. That may be good enough for diagnostics, but not for driving feedback.

Sharing data to the dashboard is accomplished by reading the encoder and writing it to a SmartDashboard variable. On the dashboard the encoder will be in the Variables tab automatically. If you want it in your own display element, drop one in either Operation or Auto tabs and give it the name of the SD variable. Those tabs default to binding to SD variables using the control name. If you want other tabs to bind to SD, add them to the array on the block diagram.

For more sophisticated displays, you may instead choose to do an explicit read on the dashboard, do the calculation or combination of data, and update the display elements yourself. A good example of this would be graphing left versus right or doing other calculations and displays of encoder data. The top loop is a pretty good place for code like this. You could also make your own loop.

WPIEnhanced... is telling the driver station how the Cypress I/O board pins are to be configured. This can be done interactively on the I/O tab of the DS. It can also be done at runtime from the robot as they demonstrate.

Greg McKaskle

plnyyanks 25-01-2014 17:31

Re: LabView code of other teams ?
 
You can find team 1124's code up here - 2009 through 2013 are in LabVIEW. Keep in mind, it won't look like what you're used to, we tend to modify the structure to better suit what we wanted (overview).

eren96 28-01-2014 20:16

Re: LabView code of other teams ?
 
I tried to understand them, but some seems hard to edit to me, especially when you add some additional vi s beside the default code. Now we can control our drive train and run arm motors, but can't control the pistons as we wanted. I added the default compressor code and by the help of pressure switch the pressure always sets himself to correct range. However the extend and retract functions only work when the pressure is above 100 psi. We use super shifters in our drive system and wired 2 shifting pistons to one solenoid to shift at the same time. So, 100 psi isn't needed to shift. How can we control pistons whenever we want to and no matter the pressure is?

Alpha Beta 28-01-2014 21:48

Re: LabView code of other teams ?
 
Quote:

Originally Posted by eren96 (Post 1333882)
So, 100 psi isn't needed to shift. How can we control pistons whenever we want to and no matter the pressure is?

Try loosening the cylinder nut a little. Sometimes the alignment on the AM Shifters are a little off and they can bind up when fully tightened.

Alan Anderson 29-01-2014 00:03

Re: LabView code of other teams ?
 
Quote:

Originally Posted by eren96 (Post 1333882)
...the extend and retract functions only work when the pressure is above 100 psi.

That sounds almost like the code to control the cylinder is only running when the compressor is not. Can you show us the relevant parts of your program?

eren96 29-01-2014 14:56

Re: LabView code of other teams ?
 
Quote:

Originally Posted by Alan Anderson (Post 1334027)
That sounds almost like the code to control the cylinder is only running when the compressor is not. Can you show us the relevant parts of your program?

No, even if the compressor is running, we can still control extend and retract functions, but within some specific range.

http://imgur.com/yWLShcp
http://imgur.com/JcrDTcO&yWLShcp&NfAFJ3K&O8KQNNz#0 (green wires come from two different buttons)

These are the codes releated to our solenoids in our begin and teleop vi. To try in a different way, we first ran the compressor and filled the air tanks and then wired a solenoid and run the program. It still does the same thing. Although the pressure switch or compressor aren't wired, we can't extend the pistons below nearly 100 psi. Is it normal?

Alan Anderson 30-01-2014 20:58

Re: LabView code of other teams ?
 
Quote:

Originally Posted by eren96 (Post 1334329)
http://imgur.com/JcrDTcO&yWLShcp&NfAFJ3K&O8KQNNz#0 (green wires come from two different buttons)

There's a red dot on the input to Solenoid Set. It means you've connected something of a type that the function doesn't expect, and it has coerced the value to something it can use. Where did you get the Forward, Reverse, and Off constants that you have going into the Select functions? It's possible that you're feeding the Solenoid function with Relay values. They happen to be completely compatible and shouldn't cause problems, but it's usually a good idea to keep the program as "happy" as possible.

Quote:

Although the pressure switch or compressor aren't wired, we can't extend the pistons below nearly 100 psi. Is it normal?
Most pneumatic systems will "work" down to 30 psi without difficulty, though they of course won't provide much force. I don't think your symptoms can be explained by anything in the code. It's probably time to examine your pneumatic system in detail. What kind of solenoid valves are you using? Do they have a manual actuation feature, perhaps a small button or lever?

Or maybe whatever you have the cylinder connected to just requires that much force in order to move. What is the mechanism you're trying to activate with the cylinder?

eren96 01-02-2014 21:29

Re: LabView code of other teams ?
 
Quote:

Originally Posted by Alan Anderson (Post 1335107)
There's a red dot on the input to Solenoid Set. It means you've connected something of a type that the function doesn't expect, and it has coerced the value to something it can use. Where did you get the Forward, Reverse, and Off constants that you have going into the Select functions? It's possible that you're feeding the Solenoid function with Relay values. They happen to be completely compatible and shouldn't cause problems, but it's usually a good idea to keep the program as "happy" as possible.



Most pneumatic systems will "work" down to 30 psi without difficulty, though they of course won't provide much force. I don't think your symptoms can be explained by anything in the code. It's probably time to examine your pneumatic system in detail. What kind of solenoid valves are you using? Do they have a manual actuation feature, perhaps a small button or lever?

Or maybe whatever you have the cylinder connected to just requires that much force in order to move. What is the mechanism you're trying to activate with the cylinder?


We solved our problems with solenoids. Thanks for your help. I guess I was lack of some essential information about solenoid. First we changed the code and then checked our wiring. We found out that our solenoid breakout is not fed by 24v on pdb and fixed it by wiring it to C and NC outs. All of our solenoids are 24v, we missed that detail. We can finally drive our robot, shift and control other pneumatic systems properly.

Now, the only thing that was left is vision processing in autonomous. We looked over the example code and tried to understand it. We could customize our dashboard by the example code. However, we still don't have any idea how to link the example code to our robot actions in autonomous mode. I know this thread is going far from its title and hope that it's not a problem. Do you have any simple and clear resources about using vision processing code in auto mode?


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

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