I want to point out a major annoyance that I’ve found in the REV Hardware Client (possibly the firmware of the Spark Max as well)
For some reason when the user sets a CAN ID in the REV Hardware Client, that CAN ID is set to ALL REV devices connected via the CAN bus, even if I’m trying to only set the device that I am currently directly plugged into via USB-C.
This literally makes no sense, why would I EVER want to set every single Spark Max on my robot to the same CAN ID? I’m forced to unplug every Spark Max from the CAN bus, then go around plugging in via USB-C one at a time to set each motor controllers’ CAN ID, then plug them all back into the CAN bus.
that is not how it work in my experience. only if you have 2 controllers on the same id do they both take the new number. in which case you don’t disconnect the can bus you just power down the robot and let usb power only the one your connected to.
Please no. That sounds miserable. The fact that the spark max acts as a can bus makes everything SOOOO much easier. I don’t want to have to go connect to each individual sparkmax. im only going to deal with conflicting ids maybe once or twice a year. I will be changing settings and firmwares quite regularly in comparison
Yes but why do you want the “set CAN ID” command to propagate over the CAN bus? The software willingly lets you mess everything up by setting all the connected CAN IDs to the same number.
And I have found this in the past even in situations with devices that already have non-conflicting IDs.
That should only happen if the devices already have the same ID, i.e. it shouldn’t make anything worse. Are you seeing different behavior? This may be worth a separate thread to dive in further.
We did this a month ago for 2 different robots and our behavior reflected what we expected: setting the ID of a Spark Max connection via USB in client only changed the connected device’s ID and did not change the ID of other devices on the bus.
I’m saying even that is kinda annoying. If trying to set the ID of the device that I’m directly connected to via USB, why is it also propagating that command to all connected Spark Maxes (regardless of their current ID)?
If you turn your robot power off, it will allow you to only set one of the conflicting devices to a new ID. You can then turn the power back on and have complete control over can bus.
Because this behavior allows you to set the ID of controllers that you aren’t connected to directly, which is useful if you have some controllers on the bus that are hard to physically connect to.
As others have mentioned, this will only happen if your entire robot is powered on.
Our can bus setup routine is usually to get the can bus running and then set all the ids and do updates over the bus. It’s nice to do this because you can update multiple at the same time. I can see a compromise where the plugged in device can have its address change without propagating to the bus, but any device on the bus updates everything. Don’t know if that’s feasible or not.
what your describing should not happen. if there are no conflicting ids i can set any spark max id to a new spark max id without it propagating to any other device even over can.
It goes over the CAN bus so you can remotely set IDs of other controllers without replugging, which can be useful.
That’s not supposed to - and in my experience doesn’t - happen. If you can find a reliable way to reproduce that behavior, it’d be worth posting here. If you’re saying you have a fully non-conflicting ID network, and changing one just changes every single SPARK on the bus every time, then… I’m not sure what to tell you, other than I cannot reproduce that and have never seen it happen, and we re-ID SPARKs with others connected every year. What version of the client are you using? What firmware is loaded?
It would be nice if the client differentiated between remote SPARKs with the same ID as the USB Spark, I agree.
I have had to ID a bunch of out of the box SPARKs all wired up on a robot for the first time before, which is the same condition (they’re all ID 0). The smart way to handle that is to just turn the robot off while you ID them instead of disconnecting the CAN bus; only the controller connected via USB will have power.
I have never experienced it changing a device with a different ID at the start. However, I have experienced Spark Maxs overlapping after many restarts when they weren’t before. It’s hard to reproduce, but it has happened a number of times to me.