Note: As of the end of December 2018, our site has changed hosts and some architecture. As a result, all tutorials are now have a /tutorials in their paths. You will need to update bookmarks.


Our Future . . .

When I initially created this site in 2014, it was to serve two primary purposes.

  1. To document the tips, tricks, and other higher level development practices that make programming for FRC in LabVIEW easier.
  2. Provide a common place for LabVIEW teams to find resources.

At first, this meant documenting the architectural and similar tools that I had learned on my way to becoming a Certified LabVIEW Developer, that had been put to use by the team I was currently mentoring (#3937, Breakaway). (This had the added bonus of helping the senior programmer that had been soaking all this up document it for his successor.)

Since then, this site has had a few additions and updates (mostly by me).

While I have often invited other teams (I am no longer in the AR area and have pretty much lost contact with Breakaway) on CD and at the regionals I've been at to write tutorials for specific topics that they had solved, I was rarely met with a response (specifically once - shout out to the Huskie Robotics 3061 for actually following through, but they were the only ones).


In recent years, I have found myself going through some family changes and needing to dial back my commitment to other activities.

This leaves this site both:

  1. Looking for a new champion/curator, that is willing to:
    • maintain the back end,
    • make sure material that becomes obsolete is either updated, or moved to the archives section of the menu,
    • and either write content or get other teams to write content to help this site remain relevant.
  2. Looking for a new source of funding/hosting. (I have been personall providing the $36/yr that it costs to maintain it using Google Domains for the domain name - and email - and Hosting24 for the hosting; I have thought about using some sort of a Donate button, but have not been able to find a platform that allows for *only* raising the target amount). (With moving to Github's gh-pages for hosting, the cost has been reduced to $12/yr, mitigating this need).


If you have any interest in seeing the continuation of this site, please let me know.

FRC LabVIEW Tutorials - File-based Auto


What is presented below is a method for defining the autonomous period of the robot in XML that is stored on the roboRIO. The XML file should be included in your version control as it is part of your source. However, because it does not need to be compiled, can be modified between runs without redeploying all of the code. This works well when coupled with the types of architecture laid out in the Autonomous tutorial with the results from the XML file taking the place of the controls.


In the project explorer (the window that opens after you finish going through the create project dialogue), right click on Target (roboRIO-XXYY-frc.local) and select New -> Control

Create a new control to define auto moves

We will use this control to define what an auto move looks like (i.e. how far to move, what direction to turn, whether or not the claw is open, what angle the arm should be at, etc.), but controls are only allowed to have one item in them, so we first add a cluster control.

Create a new control cluster to hold definition

We then add controls to it for each of the parameters that we want to use to define the movement (in this example, we will specify how far in feet -the auto code will translate that to encoder clicks, what direction in degrees, the minimum number of seconds, and whether or not the claw should be open - boolean.)

Add controls to cluster

We can set the cluster to arrange them horizontally or vertically, because this definition will be used to display them in the editor and we want it to be a series of steps from left to right, we will choose to ‘array vertically’

Arrange cluster vertically

So we can easily add or remove items from this later, we will set this as a type def (see also TypeDef tutorial for more info on why TypeDef’s should be used often)

Make TypeDef

Save the control

Getting the editing tool


Extract the files to where you want to store them. This should be with the rest of your source because uses its location to determine where to store the xml file (which you should include in your source control) and where to get the FTP (File Transfer Protocol) program it uses (WinSCP).

Extract the tool to your source location

Back in the project explorer, expand and then right click on “My Computer” and select “Add” -> “File . . .”
This will open a file dialogue. Use it to select the that you just extracted.


By putting this vi under “My Computer”, you are telling LabVIEW that you want this vi to run locally. is a utility VI that allows for you to put in your own definition of what an autonomous move looks like and build an array of such moves for an auton program. EditMoves will extract xml from the array and store it locally (when save is hit) and put it on the robot for to load when your autonomous code calls it.

Also add under the Target (maybe even under “Support Code” or under “Team Code” - it’s up to you).


Configure tool VIs for your auto

Open and put the typedef (that defines an auto move) into the array control

put typedef in edit moves

Set your team number in the numeric control (this is used for determining the IP address of the rio to send the xml file to).

Go to “Edit” -> “Make Current Value Default” to store these settings (team number in particular).
Save the vi.

Open and add your typedef to this array as well.

put typedef in load moves

(likely this will still result in a broken VI - right click on the vi and select “change to indicator to fix” if it is broken)

set array as indicator again

Save the vi.

Final settings and first test

The roboRIO has a unique ssh key that WinSCP (the FTP client that EditMoves uses) will want to store before allowing for automatic transfer.
Under the “upload tool” folder we extracted earlier, open WinSCP\WinSCP-5.11.3-Portable\WinSCP.exe

Open WinSCP to store ssh key

Put “roborio-XXYY-frc.local” (where XXYY is your team number) in the host name.
Put “lvuser” (the user that the program runs as) in the user name (there is no password on this account).
And press Login

WinSCP login to roborio

When the warning that WinSCP does not recognize the SSH key from the host (unknown host) pops up, select yes (this will continue with the connection and store the SSH key for future connections).

WinSCP login to roborio

Once connected, right click and select “New” -> “Directory”.

WinSCP new directory

Name it “config” (case sensitive - without the quotes). This is where the xml file will be stored.

WinSCP name the folder

Back in, run the vi and set some moves. In our example, we’ll configure the robot to go forward 10 feet, turn right 90°, and open the arm (for 1 second).

Configure the movements

When we press “Save and send to robot”, the array of movements is parsed to xml, stored locally, and copied to the config folder on the roborio. To see the file on the roborio, go back to WinSCP (you may need to refresh it to see the file).

Confirm the file is there

Lastly, we check that we are successfully able to have the robot read it back out of the file.
Go back to and run it (since it is under the Target in the project, it will deploy and run on the roborio)
If everything worked, you will see the same moves you just stored in read back out.

Confirm recalling movements is working

Some possible improvements

If this tutorial inadvertently leaves some details out, please tell us about it and we will update it.

Google Form to request details