It seems like every year a team raises the bar. I typically wait for 254’s release yearly and go through every class like I am reading a book. As a team looking to improve our software, we are always looking for project ideas.
What software features did you add this year?
What cool open source software have you seen lately?
Anyone know what cool things 254 has in store? lol
We also had a huge influx in rookies going from 2 programmers to like 10 or 15, so we have had to put a lot of effort in hands on training. It seemed like a chore but it’s been a great experience bc when you teach something you learn it better yourself.
I thought this may be a good thread for my first post lol.
Improvements to DNN object detection accuracy
Improvements to swerve wheel odometry (ended up using camera visual odometry instead)
Added path visualization debugging output
Added obstacle avoidance to path planning, and sped up path optimization
Added an easy way to adjust the path so the intake ran over waypoints instead of the center of the robot
Use object detection code to generate and drive an optimized path through an arbitrary set of game pieces
Updated particle filter localization to use AR/VR markers in addition to DNN object detection, plus lots of other improvements to particle filter robustness
Simulation updates - auto driving, added field map(s), added simulated camera inputs
I totally get where you are coming from, because I had that same philosophy for many year.
The great thing is, you can have both! By imbuing your students with the desire to grow, it can both write clean code and have fun. Unfortunately I don’t have time to write out the “how-to” of it all, but I would be happy to have a chat about it at a future date.
We actually do run trajectory generation and following on the Jetson since it is way faster than the Rio.
Motion profiling is a different subject. The code for that in our setup runs on on the motor controllers, e.g. Motor Controller Closed Loop — Phoenix documentation. The code triggering motion profile actions does run on the Jetson in our case, but that’s not new for this year so I didn’t mention it … nor would I really recommend it to other teams unless they already had success running a coprocessor for much less vital tasks.
Since C++20 isn’t here yet, 3512 wrote an autonomous mode solution that mimics coroutines (aka suspendable/resumable functions); it worked pretty well.
Here’s an example autonomous mode:
The idea is the main robot loop and an autonomous thread yield to each other so that the autonomous mode gets resumed during each periodic run, and the thread’s stack frame effectively provides the state machine bookkeeping instead of a state machine we write explicitly ourselves. Since the synchronization is written so that the threads never run concurrently, there’s no thread safety issues.
Here’s what actually emulates the coroutine.
I thought it was kinda neat, although I imagine modern command-based serves teams just as well.