For those of you who are experienced in using path / trajectory planners, how do you do plans where you have different segments?
For instance, let’s say I want my robot to back up to grab two more powercells. Then I want it to drive forward and turn left. Do you make the first trajectory, save it to a file, then make the second one and save that one too, and stitch them together in a program like excel?
Next - if you’re running commands at the same time, like intaking balls then not intaking balls, how do you generally run these commands? Do you wait for a specific time in the trajectory? Or do you base it on something else, like robot position?
In that case, we just drive the first path and then the second one, in two separate commands. Most times you drive two paths one after the other, you need to switch driving directions so you have to use two paths.
You could just run the intake always (while driving) because it’s not very consuming.
If your path following is accurate enough, these two are interchangeable.
When 1712 first developed our path planning tool in 2018, we would only have one path to follow. Anything after that was just a sequence of autonomous commands (including further drive commands).
For 2019, we upgraded our autonomous tool to accept multiple paths in the same routine. We never got far enough with our 2020 robot/season to start really getting into our paths for Infinite Recharge.
One of our (now) alumni built our autonomous file editor that stitches together our paths and commands for autonomous. It outputs the desired commands into an XML file (pretty much the same idea as stitching them together in excel, but automated). I’m attaching our 2019 and 2020 control system handouts which have some more information on this: ApprovedDawgmaProgrammingHandout2019.pdf (417.9 KB)
We generally base these on time. We trust our pure pursuit controller to be robust enough to follow in most situations, including when unexpected obstacles occur. We also leave some margin for error with regard to how long we run intake commands.