LabView



We inherited a labview groundstation GUI from the awesome guys over at RMC after Sailbot 2011, since it seems that thier program will be put on hiatus by the end of the year due to lack of interest. Part of this came from the ArduPilot system from http://diydrones.com/. The GUI uses LabView, which Mech Eng students are exposed to in class, but the software team has to learn a bit about.

Learning
Introduction to NI LabView

There seems to be a runtime version of LabView - maybe this will work on the netbook? See http://diydrones.com/profiles/blogs/ardupilot-21-released-setup (scroll down)

License
LabView is installed on the computers on the second floor plaza of the ILC. There is no after hours access to the plazas in the summer due to the lack of iCons, so we got the install disks from David Lay for our computer, which is covered under the site license. When we get a new laptop, we will need to borrow these disks again.

Integration with Data via Raven X
see also: Raven X

As of September 2011 (not long after we got Raven X) we are thinking of having the Arduino act as a server and respond to general/blank HTTP requests with sensor information, and maybe some very basic menu commands like "come home" with specific requests. Hosting this information on a website requires changing how LabView aquires the data, since it is no longer arriving via a (virtual) serial port via Zigbee.

Possible solutions include:
 * LabView reading the website directly
 * Read HTML code from website using DataSocket (which is fine since html tag formatting will be minimal/nonexistant): http://digital.ni.com/public.nsf/allkb/89171CEC879A70A3862572950057ACC6
 * LabView Web Services (relevant?) http://zone.ni.com/devzone/cda/tut/p/id/7350
 * Software utility (Java, C++, Python) that reads the website and writes data to a file that LabView then reads. A performance penalty is expected, but if this is for tracking the boat while autonomously sailing on Lake Ontario from afar, then this should not be a problem.
 * Java read from website (easy): http://snippets.dzone.com/posts/show/3553
 * LabView read from file: http://zone.ni.com/reference/en-XX/help/371361B-01/glang/read_characters_from_file/

GPS Data notes
See Wind Sensor page, under GPS Data heading.

June 29/2011
Set up with with one xbee through Serial connection to desktop, and another through USB to netbook. Tested the setup with hyperterminal first (type on one computer, showed up on the other). Note that you can echo the character locally in hyperterminal by going File->Properties-> Settings Tab ->ASCII Setup then check the "Echo typed characters locally" box.

Then opened LabView and groundtest.vi. It crashed when I first booted, since it tried to run and the serial port was set to COM5. Change this to COM1 (when using Serial connection, use windows device manager to see the port number if using the USB xbee dock), then run by clicking the arrow in the top left. You stop by pressing the stop sign that appears. Sent the string: and the tail dial moved. Then sent one by one which all reacted appropriately. A glossary will need to be made for all the signals, but for now its not hard to interpret from the labview diagram, once you know what you're looking for. Simply typing the string in seemed to time out, since the "Part 1" display at the bottom of the view would only show part of the message. Typing first in notepad, then pasting in hyperterminal by right clicking and choosing "Paste to Host" (ctrl + V didn't seem to work) worked
 * 1) TAIL: 56***
 * 1) SPD: 1337***     //ground speed
 * 1) SPOS: 22***      //sail position
 * 1) vwR: 8***        //relative wind speed
 * 1) vwthetaT: 178*** //theoretical wind angle

This is very promising since all we will need to do is integrate these update string into our code, once the above is resolved

July 4th, 2011
Installed google earth, and now pressing the button launches it :) Still need to send GPS coordinates so that we appear in the right place.

So it turns out you need to update all aspects at the same time, see rmc code Boat_transmit function. If you send only one thing at a time, it resets the others. An example of this is

but really all the aspects should be between the ### and the ***, as labview updates everything at once, anything not updated will be set to 0.
 * 1) RUD: 23 JIB: 43***

Another thing we learned is that you can send a text file through hyperterminal using Transfer -> Send text file. It saves the copying and pasting.

Performance
Performance was greatly improved after the elimination and simplification of several components in the groundstation. After testing, it was determined that the main cause in delay was from the length of the loop in the arduino code. Removing these delays greatly improved the speed at which labview updated and gave much smoother performance. It may be better to just call sensordata and transmit instead of the delay function, as this wasted time can be used to maintain better groundstation performance.

Performance in sending data is still very slow.

Glossary
A Glossary of commands currently included in the RMC code:

GPS LAT: current Latitude -still need to figure out the correct format to send data LON: current longitude - looks like RMC is sending degrees minutes decimal minutes DDMM.mmmm, then dividing by 10 before sending ALT: altitude GPS: gps lock SPD: ground speed Wind direction and Velocity vwthetaBR: vwR: relative wind speed vwthetaT: Accerometer ROL:  Navigation DMD: dmode- decision mode on the trimeran WPT: waypoint index number Control RUD: tail position MAIN: main position JIB: jib position Current actions brng: bearing setPoint: direction towards next waypoint vbthetaT: WT: wind test setting in the RMC code T21: stationkeeping related code

To find the Compass figure, go to controls, select a control, and it windrose.ctl.