Left it running in what I thought was an idle state, ended up getting delayed a while, and when I came back the whole board was super hot and unresponsive, motor was too hot to touch, plastic mount was melted etc. I had been playing around with mirroring and PID settings, so I imagine I must’ve left one motor bouncing back and forth trying to match the other, but without enough dampening to ever hit a stable setpoint. User error, of course haha.
A note on the plotting. I did a little mini control panel for odrive using DearPyGui a while back, and the plotting turned out really nice using a list of plottable variables with radio buttons for “off”, “graph0”, “graph1”. Then I could arbitrarily plot any variable, from either motor, against another variable. This ended up being nice for phase shifted movements, comparing current draw between them, etc. It was really easy in DPG (because DPG is immediate mode GUI, dynamic changes like that are a breeze), and I found it quite helpful. If you are migrating your plotting, might be worth adding a note to look into selectable variables for traces.
That’s a great point about discoverability for high level configurations. From what I can tell, every node that has subnodes also has, at the least, read-only variables, so every node will have something to display on the main canvas.
Highlighting changes is really a clutch idea. I’ve worked with industrial control systems that don’t do differential highlighting, and it can be a nightmare of “what was it that I changed?”, and “what state is the system in?”.
Another thought that comes to mind, I haven’t seen anything from the ODrive team that indicates the API is stable now. One of the pain points I’ve run into with control systems over the years is Hardware → Firmware → Software version incompatibilities. If you are planning to upgrade your odrive, either in hardware or firmware, it may save you a headache down the line to have a plan for dealing with breaking API changes, if there’s not one already. The auto-generated tree is probably the greatest asset for dealing with this, but there’s also function signatures and enums to deal with, ie “CTRL” → “CONTROL”, etc.
Really wish I could help more with this than just throwing spaghetti at the wall to see what sticks, but after having poked around the codebase quite a bit, I feel I’d be more a nuisance than an asset for actually writing code.