Chief Delphi

Chief Delphi (http://www.chiefdelphi.com/forums/index.php)
-   Programming (http://www.chiefdelphi.com/forums/forumdisplay.php?f=51)
-   -   Who Has Programmed From Scratch? (http://www.chiefdelphi.com/forums/showthread.php?t=82959)

apalrd 18-02-2010 21:52

Re: Who Has Programmed From Scratch?
 
I can't say much about Killer Bees code(well, actually I can), but Windows says the project directory has 114 files, not including the stuff in Builds. Those include VI's, LBPROJ, and MNU's. This does not include the Dashboard, it has its own folder. Most of the files are VI's. We took the default structure, and then separated all of the code into modules that run in their own threads. We also designed it to work the same on both robots, keeping two sets of cal points, process variables, and opening IO differently for each robot. We left the existing Elipse finding software, but wrote our own camera tracking software, although it uses the gyro in a similar way to the default code. Everything communicates with global variables, so there's not alot of wiring data between the modules (Actually, there is exactly none.) We made use of Diagram Disable structures to allow us to debug modules separately. No line count; LabVIEW dosen't have lines.

Oh, and for Autonomous - We wrote some cool stuff. So cool it needs to know if it is running on Win or VxWorks.


A direct answer to the question:
We took the Default code, and then added an enormous amount of code to it. We used hardly any of it.

As to the programmer that is never done:
I am still perfecting much of the autonomous stuff and implementing many features to increase accuracy and make it as close as possible to the simulator.

Lord_Jeremy 18-02-2010 22:47

Re: Who Has Programmed From Scratch?
 
Heh. As I just posted about in the Java forum, my codebase just broke 5000 lines. Complex things like the navigation-enabled drive class is nearly 1000 lines. I did a lot of things from scratch, not even using the WPILibJ stuff except for really low level. (I'm sure you can agree no one likes staring at data sheets trying to figure out how to send the raw signal to the Jaguars)

Tom Bottiglieri 18-02-2010 22:53

Re: Who Has Programmed From Scratch?
 
Quote:

Originally Posted by davidthefat (Post 922622)
but my self was saying software first from the beginning, taking into stanford's philosophy of software first. I wanted to focus on the software to handle almost every thing, but too bad that didnt happen

Stanford had a large amount of support from VW during the GDC.

Also,
Hardware always comes first. If your FRC software isn't required to be anything more than dumb, you will have a better robot. I guarantee it. Any software you develop means nothing if the hardware isn't reliable.

Loubear 18-02-2010 23:54

Re: Who Has Programmed From Scratch?
 
I take a "if it's not broken, don't fix it" mentality towards all of this. If the existing camera code works fine, I have no qualms just using the default code. My time can be better spent doing something more productive and not already done, like implementing a kalman filter to augment dead reckoning, or creating an editable config interface. If you want a robot that just drives and does nothing else; then you could always use the default code. Other than that, there are PLENTY of neat things to be coding.

will_1359 19-02-2010 00:14

Re: Who Has Programmed From Scratch?
 
so far i've got 5 class's about 25 lines of code each, and no robot to demo the code on... scrim is saturday, should be interesting

Lord_Jeremy 19-02-2010 00:22

Re: Who Has Programmed From Scratch?
 
Quote:

Originally Posted by will_1359 (Post 923635)
so far i've got 5 class's about 25 lines of code each, and no robot to demo the code on... scrim is saturday, should be interesting

Gah, that's always a hardship... I was supposed to get a robot tuesday, but of course the magical gods of aluminum decided to forsake us and four of our axles bent. Went downhill from there...

Greg McKaskle 19-02-2010 07:46

Re: Who Has Programmed From Scratch?
 
On the LV lines of code measurement, in Tools>>Profile, there is a VI Metrics item which will give you statistics about your code. The tool only works on one VI at a time, but if you write a quick VI, you can call the same method on a VI and build your own tables/graphs, or whatever. It is often used by bigger SW teams to keep track of how their code has evolved.

Greg McKaskle

bcieslak 19-02-2010 11:01

Re: Who Has Programmed From Scratch?
 
Quote:

Originally Posted by will_1359 (Post 923635)
so far i've got 5 class's about 25 lines of code each, and no robot to demo the code on... scrim is saturday, should be interesting

Hey welcome to the wonderful world of Embedded Systems engineering. It not only happens at FIRST but in industry too. 13 to 26 week lead time on parts and boards....and management expects the firmware to be done and tested the day the boards arrive...There's a lot of truth in those Dilbert cartoons we laugh at. (sad to say)

Next year build up an electrical board that you can develop code on, then drop into the robot the last week when the mechanicals catch up.

BC

apalrd 19-02-2010 12:59

Re: Who Has Programmed From Scratch?
 
Quote:

Originally Posted by bcieslak (Post 923820)
...Next year build up an electrical board that you can develop code on, then drop into the robot the last week when the mechanicals catch up..

Thats not the hardest problem. The hardest part is trying to tune feedback loops with everyone's hand out of the robot. Even when it's done, there are stil like 30 people trying to measure things for the practice robot or adding graphics or something, all of whom think they have a more important job than everyone else or think they're not directly in my way. They are. Everything is so close together that touching the robot = in my way.


EDIT: VI stats on Robot Main and subs, total:
1529 nodes
165 structures
353 diagrams
2022 wire sources
88 controls
65 indicators
0 property reads/writes
80 global reads
53 global writes
1 local read
0 local writes

Averages:
29.3 nodes
2.95 structures
6.30 diagrams
36.11 wire sources
1.57 controls
1.16 indicators
1.43 global reads
0.95 global writes
1.29 connector inputs
1.07 connector outputs

Over 56 VI's
393 vi.lib calls

That dosen't include any of Autonomous Independent - That will be harder to check, since it relies on a few Invoke Nodes which cause LabVIEW to not follow all subs. This dosen't include any of auton.lib either...

Dave Scheck 19-02-2010 13:40

Re: Who Has Programmed From Scratch?
 
Quote:

Originally Posted by apalrd (Post 923519)
I can't say much about Killer Bees code(well, actually I can), but Windows says the project directory has 114 files, not including the stuff in Builds

For reference on the C++ side, we're currently at 120 files (.h and .cpp) with 12,146 lines (using a simple wc -l). Last year we had 137 files and 11,015 lines.

Our framework is a bit overkill, but it's definitely a very elegant way to approach the problem. The whole mentality is to isolate the inputs from the outputs and make the class methods simple and straightforward.

In a simple example, lets consider a simple two motor tank drive system controlled by a single joystick in arcade mode. Our robot class would instantiate the following objects

* Gamepad - The gamepad that controls the driving
* WsControllerAxis - One is created for each axis on the gamepad
* WsControllerPolarStick - Takes in two WsControllerAxis objects and creates a polar coordinate system out of it.
* WsControlMethodTank - Takes in a WsControllerPolarStick (as well as any buttons that are needed for driving such as turbo) and converts the inputs to a WsDriveVector (speed and direction)

* SpeedController - One is created for each Victor that we're controlling
* WsSc - Wraps a SpeedController so we can do things like disable or debug
* WsDriveBaseTank - Takes in the two WsSc objects. Uses a WsDriveVector input to calculate the outputs to send to the WsSc (and subsequently the SpeedController)

Then from in the teleop periodic call, we simply do a get on the WsControlMethodTank to get a WsDriveVector and pass that in to the WsDriveBaseTank and away we go.

On the autonomous side, we simply make these same types of calls and reuse the entire drive base objects. In addition, all of our programs run in a common engine that takes simple commands like driveByTime or driveByEncoder. This makes writing programs as simple as defining the steps and calling an addCommand function. Our individual autonomous programs last year didn't have a single line of logic in them. They simply assigned values to the step parameters and called addStep. Since they all derive from the same base class, they all have a run in the base that handles stepping through the commands.

Jon Stratis 19-02-2010 13:43

Re: Who Has Programmed From Scratch?
 
Quote:

Originally Posted by TomBot (Post 923577)
Hardware always comes first. If your FRC software isn't required to be anything more than dumb, you will have a better robot. I guarantee it. Any software you develop means nothing if the hardware isn't reliable.

I would disagree with this - a good robot is designed with everything in mind. The best mechanism in the world isn't going to do anything unless programming can make it work. So many people (especially students, but it applies to mentors, too) in FIRST are completely focused on their own specific area - be it mechanical, programming, electrical, PR, scouting, driving, or whatever - they forget to step back and look at the big picture. You see this in industry, too - you may have 100 people working on a project, and everyone is completely focused on making their part perfect. If you don't have someone concerned about the big picture, you'll end up with 100 perfect parts that don't work well together.

Our team tries to solve that problem. We start with the big picture, and make sure everyone knows what we want the robot to be able to do. During the season, roughly ever other meeting we take the last 15 minutes for "show and tell" - we go around and everyone presents what they've accomplished. This gives everyone a chance to not only be exposed to other areas, but to provide thoughts when someone encounters a problem and to show off their accomplishments. We've managed to build some pretty sweet mechanisms over the past few years, put in place all the feedback that was needed, and write some fairly complicated code to get it all to work.

It's not software first, and it's not hardware first. It's robot first, and a robot is all that and more.

AmoryG 19-02-2010 14:25

Re: Who Has Programmed From Scratch?
 
Quote:

Originally Posted by TomBot (Post 923577)
Stanford had a large amount of support from VW during the GDC.

Also,
Hardware always comes first. If your FRC software isn't required to be anything more than dumb, you will have a better robot. I guarantee it. Any software you develop means nothing if the hardware isn't reliable.

Yep. What's the point of getting your camera to track if you're just as likely to hit the referee standing 10 feet from where you were aiming?

apalrd 19-02-2010 17:56

Re: Who Has Programmed From Scratch?
 
Quote:

Originally Posted by Dave Scheck (Post 923935)
...On the autonomous side, we simply make these same types of calls and reuse the entire drive base objects. In addition, all of our programs run in a common engine that takes simple commands like driveByTime or driveByEncoder. This makes writing programs as simple as defining the steps and calling an addCommand function. Our individual autonomous programs last year didn't have a single line of logic in them. They simply assigned values to the step parameters and called addStep. Since they all derive from the same base class, they all have a run in the base that handles stepping through the commands...

We did something fairly similar, except instead of adding commands to a list, we simply called the commands directly. We wrote our code in LabVIEW, and it runs in a virtual thread, so we can do things like this c++-equivalent code:
Code:

void auton_f1(void)
{
set_ball-o-fier(RUN);
drive_Straight(36,0.6); //Drive forward 36 inches max speed 0.6
drive_to_ball(0.3); //Creep to broken-beam sensor
kick(); //Kicker manipulates ball-o-fier as necessary, leaving it in its original state
drive_Straight(24,0.4); //Drive to almost next ball
drive_to_ball(0.3);
kick();
.....

We initially wanted to write the Auton code in Python, but decided that the Python-Labview interface would be too challenging to write compared to its advantages, so now we just put a bunch of VI's together and execute them sequentially.

davidthefat 20-02-2010 11:02

Re: Who Has Programmed From Scratch?
 
Quote:

Originally Posted by TomBot (Post 923577)
Stanford had a large amount of support from VW during the GDC.

Also,
Hardware always comes first. If your FRC software isn't required to be anything more than dumb, you will have a better robot. I guarantee it. Any software you develop means nothing if the hardware isn't reliable.

I mean the hardware supplements the software, not software supplementing the hardware, a big difference


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

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