Ok, first I made the Autonomous Challenge for those teams with 2+ years of programming experienced member in their team. I never meant it to be for the teams with rookie programmers, even if your team is a veteran, the veterans leave every 4 years, so not even veteran teams. I never meant it to be accessible to rookies just like that, without them actually knowing whats going on. I remember like 4 years ago, I looked at the source of AssaultCube, I was just blown away, me being 12 did not help much either. But I still had the basics of C++ under my belt. I am not trying to brag or anything, but 4 years of programming experience is not much considering the fact that there are guys with 10+ even 30+ years of experience. But the project was NEVER intended for new programmers. I like the motive of the guys behind the autonomous SDK stuff, but really, it won’t help in the long run… Building things from scratch builds character.
Programming is like any other profession: the longer you do it, the better you get. I see back at my old code from when I was 12, I just facepalm my self. It is terrible… I new how to program, sure the end result worked, but the way I did it was either redundant or just plain ol’ stupid.
Yes some of you more experienced guys out there might think I may be on the same boat, an autonomous robot is just way over my head. Well the end result might not get my championships, but I can say confidently that I did not touch the joystick the whole competition.
edit: I had an Algebra 2 test today, I can now say that I think too much like a programmer… I do not get enigma stuff… I think of for loops instead…
So on one hand, you’re trying to tell programmers to be realistic about their skill sets and what they can accomplish, but in te same breath you’re saying that as a student with a few years of programming experience, you can achieve what computer scientists work on for years in a 6 week build window?
I really don’t like killing childhood dreams or anything like that, but let’s take this year’s game as an example. I’ll even let you pretend you have 1114’s robot so you have as much technical capability as possible. Take an empty field. There are 3 balls on it. Which one should the robot drive toward? How accurately can you get the ball’s position? What if it rolls away out of camera view? Now add other robots, how do you pick the ball that is least likely to be knocked away by a defender? How do you account for the slipping of drive wheels and being pushed sideways, accurately enough that you’re not at an insurmountable disadvantage to anyone with eyes?
It’s an enormous task, and while taking enormous challenges is a load of fun, are you really going to suck up your team’s resources, time, and effort for your own personal goal? Perhaps if you’re interested in AI, you can start simpler and scale up. Making a simple 2v2 grid and turn based game of Breakaway that you could work on AI algorithms for would be very interesting, still extremely hard, and isolated from your team’s on field performance. If you like sensor work, there’s still autonomous mode, or you could automate portions of teleoperated play like hanging.
Never said 6 weeks, I am working on it right now. I kinda see what you mean, but honestly if you don’t even know how to use pointers, how do you expect to do this? But the professionals have a different goal, I am not trying to argue, just stating my opinions
So, let me get this straight, you are trying to write an AI that can solve any problem? As someone who HAS written AI systems I can safely say you clearly know nothing. If you are interested in learning I would suggest you look into writing a simple program to solve an 8 piece puzzle in a reasonable time (ie, faster than a person can do it). When you do that I have another “trivial” problem for you to solve.
No, I was thinking more like before the match, either have a switch board that has all these options that give the robot “moods” like aggressive, passive and what ever then just go into the match and just let it run. Or do that softwarely and have a config file
I know this year our robot’s autonomous was controllable by different switches on the robot. Different combinations selected one of about eight different programs. This might be simpler than swapping out a card.
From scratch then? Alright, well why aren’t you programming in assembly language then?
Yes, clearly it’s important to know how things work and to be able to evaluate their performance. But from scratch, really? I’m going to use std::sort() on my std::vector<> full of dynamically allocated objects full of boost::shared_ptr<> objects long before I try to write my own sort function on a raw array that I have to manage myself along with all of the silly pointers for my dynamically allocated objects. It’s just not worth my time.
Once you get to the real world, you will find there is a huge value to generic frameworks/libraries that already exist and have been debugged and well thought out (and theres even value in some of the ones that haven’t quite been thought out all the way).
I believe that the WPILib is more than enough generic but more than enough to pull off an autonomous mode of this magnitude. Well IDK about you, but I feel way more accomplished if I do it from scratch. I rather program from scratch using OpenGL than use Irrlicht or Ogre3d or other stuff… Builds character
I was thinking of not commenting on this tread. Too much flaming. Oh well.
I would much rather use libIrrlicht then access the raw OpenGL interface. It handles so much for me, more to not write. And with games (what Irrlicht was designed for), there is already so much to write it’s not really funny to think about not using existing libraries.
As I once found in a programming book, in an early chapter on simplification and thinking through problems before implementing them:
The lazy programmer re-uses code whenever possible.
The message is clear. Don’t ever re-invent the wheel. It has already been invented. Don’t re-code something that has already been coded, that would be a waste of your time. Use it and build on top of it. You will still learn and feel accomplished.
Since you seem intent on autonomy, why not take a mars-rover approach and have the human give the robot simple commands which the robot then executes autonomously. Tell it what its goals are, where to move (virtual playing field?), possibly where objects of importance are, and let it generate and execute the curves and paths needed to perform the task. It will be much easier then letting it think on its own, because it is stupid until you make it un-stupid. And making it un-stupid will take a lot of software, much more then you want to write. The programming time necessary to let the humans make tactical decisions while letting the robot perform relatively simple drive commands will be much, much less then full autonomy. And, you can blame someone other than the programmer when it makes a mistake. Speaking of relatively simple, what is the most complex robot project you have programmed? Nothing near what you want to attempt.
Have fun. And use third party libraries where appropriate.
And, by the way, the cRio has a flash filesystem just asking to store configuration data. Much faster then re-compiling, much easier to implement then SD cards.
Yes I see you point, but I am doing this for the educational purposes. We are all students, we are not programming a multimillion dollar project that needs to save as much man work as possible. I totally would love if there was a development kit that does autonomous for me in a couple lines of code, but where is fun or the experience in that? IDK about you, ever since I was in like 3rd grade, I started taking things apart trying to see how everything worked and put it back (some times I just render it unusable) But this is what I love, there is so much to learn. I am not working NASA or some crazy big company, that means my product will not reach a broad audience. I don’t know how to explain, but this is not our job, to be a programmer. Our job is being a student, what does students do? Learn, learning will only happen if you try it your self. About your Mars Rover approach, just does not feel “right” sure if I can’t fully reach my goal, may be I have to settle for less and continue on the next year, but my goal is not semi autonomous. Success is not a destination, its a journey.
Our team programmer before he graduated suggested we made a robot that would operate on it’s own will power and do whatever it thought was correct. Basically whatever he wrote the code to do. So if it were kick the closest ball, it would do that. But the robot would remember what it did, and he had 2 buttons for it. A “No/Bad Robot” button to tell it that what it did was not good and it should not do that again. And if we pressed that one too many times, he figured the robot would sit there and twitch, unwilling to do anything afraid of being reprimanded, so he suggested a “Self-Esteem” button.
I found it funny how people in this thread were talking about AIs and robots with Moods while our programmer thought that a few years back. Just something to think about