This is something we have a solution for, though we haven’t needed to use it on a robot yet. I’ve used it personally in multiple FRC and non-FRC applications and it works quite reliably. We will probably write something up on this soon as we are actively working on multiple cameras per board for next season, but just to get you started, udev rules are one way to accomplish this.
By changing the KERNEL value in your rule, you can filter down to a specific USB port (this also works on externally connected USB hubs) by experimenting with connecting a device to different ports and identifying the correct value for that port. The rule creates an “alias” in /dev with a name you specify that essentially points to the actual device. Instead of opening “/dev/video0” you would then use “/dev/youralias” and that would always be tied to the device on that port.
I’m traveling currently, but I’ll set a reminder to follow this reply up with a real example we’ve used to hopefully make it clearer when I get back next week.