[Cautionary Tale] Robot Characterization With Brushless Motors and Human Error

Greetings FRC community! I am excited to finally have an experience that I can share with our growing FRC community that might help other teams.

This year, after watching my teammates drive the robot through the skills challenges courses, I started looking around for good solutions to the autonomous challenges that I would eventually have to conquer. I came across the new (introduced to last season) trajectory features in WPI Lib and started reading the documentation to learn how I could implement trajectory tracking for my team’s robot. After quite a bit of head-scratching and some preparatory coding to ensure that I could even make sense of trajectories, I started preparing to run the robot characterization tool on our robot. At our next meeting, I attempted to deploy the configured characterization sequence from inside the frc characterization app. After having no such luck, I finally decided to open it up in visual studio code and deploy it from there. I then attempted to run the robot in autonomous mode, as instructed by the characterization app, and promptly crashed my robot into a wall, as I had failed to make sure that the code had deployed successfully and had an autonomous drive forward command set up in the previously deployed code. Unfortunately, I had a newer version of WPI Lib installed on my laptop than specified in the build.gradle file, so deployment failed. After editing the 3rd line of the build.gradle file that was generated to match the version of WPI that I had on my laptop, I was finally greeted with a successful deploy. As one would have probably guessed by now, I ran into yet another issue when I tried to run the autonomous code. This time, when I ran the sequences, the motors appeared to be fighting each other. I double-checked my configuration and was absolutely positive that there was no way that the motors could be fighting each other but couldn’t think of any other explanation for why the code wasn’t working. After attempting to edit the generated code in an attempt to stop the motors from fighting, I was informed by my team’s programming alumn that I had set the characterization script to use brushed motors instead of brushless, which was causing the brushless motors to not run properly. Apparently, I hadn’t throughoutly read through the config script and assumed that “true” correlated to brushless when it in fact correlated to brushed.

Motors: Neo Brushless Motors
Motor Controllers: Rev Spark Maxs

2 Likes

Chasing this bot in my electric car while characterizing the drive was pretty high on the “silly” axis of the fun factor :wink:

1 Like

I’m surprised that didn’t fry your motors as it has for others. The brushless motor windings aren’t designed to handle the continuous current brushed motors are. Normally, teams have to make an explicit decision on brushed vs brushless when they construct the motor, but the characterization tool makes it much easier to mess up because it generates that code for you.

2 Likes

We have to do that again some time