Anybody using "Command & Control" this year?

I see LabView has an example of using a Command & Control infrastructure similar to what the Java & C++ folks often use. It looks interesting but I’m hesitant to take the time to learn it and pass it on to the programmers on the team. It seems to have a bit of a steep learning curve.

Is anybody planning to implement it for this game?

My team has started to implement it. It looks more daunting than it really is. If you want to bring it to your team, I’d suggest taking some time to go over the documentation provided by both NI and a beta team to get a general understanding of the architecture. My team started reading it together and asked me questions as they got stuck on points. They were picking it up pretty quickly.

One thing I’ve pointed out to them is how much it is like OOP. They’ve been learning Java in school and are more familiar with how objects interact with each other than they were anything else. If we point out objects calling methods in other classes are only sending messages/commands, it becomes easier to see how the commands being sent relate to code they’ve seen in the past.

Depending on how comfortable you are with your programmers, it might be best to get the robot code in a good condition using what they’re used to and then challenging them to branch out into command and control. My group worked on the familiar architecture up until they wanted to work on autonomous. When they started seeing similar actions taking place in a variety of possible autonomous cases, they liked the idea of sending a command to complete the task instead of copy/pasting or creating their own subVIs to duplicate their efforts. At that point, they started digging into Command and Control.

One of the goals of the framework was to make it compatible with the previous way of doing things. This means that you can choose just one subsystem and implement it using command and control and see what you think.

Something with a control loop or a state machine would make a good candidate.

You add the subsystem using the wizard and it gives initial code for the controller and some basic commands to drop off new set points. This is really pretty similar to using a periodic task except that the commands can more easily cancel an operation and start a new thing. It also keeps the implementation details within the controller, so changes to a pot, encoder, motor, or wheel are way less likely to impact other code. It gives you a trace to know what mechanisms were doing what at any point in time. It gives you an easy way to synchronize with the completion for autonomous steps.

Greg McKaskle

My team has all new programmers this year, all freshmen from our highschool. I’m the lead programmer and I started out learning Labview with the standard control method, and for simple driving and other tasks, it worked out well. With Stronghold, I find it well worth the time to learn command and control because I was able to make a working shooter within maybe 10 minutes with it. My advice: if you don’t know it now, don’t try it until next year. Try learning it not during the build season, try learning it next year on a test bot.