Just as a notice, this is for competition robotics and all concepts need to stay within competition rules.
Recently I was testing my robot’s autonomous mode, and I realized that the robot experienced a great deal of arcing (the drive system is holonomic, but it is a modified + design). While I tried dropping voltages, which helped a little, I realized the main problem was also that at the beginning of motor movement it kicks - one side always kicks first and/or more, and consequentially the entire robot is put off track and moves at an angle regardless of arcing.
I was wondering if anyone else has experienced this, and if there is any way to eliminate kick at the beginning of motor motion.
I did not try this so I don’t know if this’ll work but a suggestion would be to right when your autonomous starts, set all of your motor values to 0 (you might want to try and do this in the “preautonomous” section of the code) , and then right after, without any time between, set the motor values to their designated values.
I do not know if this will fix the problem, but it seems to me that it’s happening when the code reaches that first line of code in the autonomous sequence.
I don’t think it would be the programming (although your guess is as good as mine). What I noticed of our robot at our last competition is that it had a tendency to tilt to one side, because our battery weighed one side down which made the wheels sink in deeper and harder to turn.
Or if that’s not the problem, maybe if you gradually accelerated the motors or programmed it to move slower it would reduce the “kicking”. I’m not totally sure what you mean by arcing though - is it turning to the side and moving in an arc?
I have found that it is better to not set it to max power straight away. Instead ramping up the power helps, even if its just over a second, it puts less strain on the motors too.
This would be a good idea if you were going for accuracy, but autonomouses can sometimes be drag races to the center wall, and the team that gets there first gets off the initial dump, and then blocks the other robot from coming in and scoring and in some of the matches I saw, either the 5 points at the beginning were important, or the position that some teams held going into the drive control period critical.
Well, if you’re spinning out of control and going into this arc that causes you to completely miss the goal, I’d say just ramp up the power slowly so you actually get some points.
The problem is not that the robot is entirely spinning out of control. One motor just kicks, and then the entire path of the robot leans to the one side. When this happened, our robot still won autonomous points, and we scored easily, hence the reason why I didn’t avidly try to fix the problem.
Try observing a different motor attached to the same microcontroller port.
Try observing the same motor attached to the same port on the microcontroller, but disconnected from the axle and the rest of the machinery (from all sources of friction).
Try connecting the same motor to a different motor port but not changing anything else in your software.
See if some other part of the software is sending a command to that motor (moments before the holonomic driving command is sent) by commenting out the one statement that sends the holonomic driving command.
Look at the trim settings on your transmitter and at the values the microcontroller is receiving from it as you start driving.
It’s either the software, the microcontroller hardware, the transmitter, the motor, or the mechanical part of the motor/wheel assembly (or something else;)).
Devise tests that will let you isolate the problem, then fix it or replace (or work around) any part that can’t be fixed.
If the kick comes from random values left in the microcontroller when/after you turn it on; ensure you are assiging initial values to everything in your code, and write some instructions that will get the bot into a known state before attempting to move it during the rest of the autonomous time.
The only thing Blake didn’t explicitly mention is friction. These are low-power drive systems and a little friction can make a big difference. Disconnect the motor from the wheels and see if they spin freely.
I built a tribot a while back where the motor kick became a big problem for me during outonomous. The robot was quik and light so even the smaller “jolts” would send it off course.
I tried to start the motors slowly then let them go at full speed -reduced the problem
2)then I tried to add turn compensation - solved the problem half the time
3)Shaft encoders -did not help becuase the jolt or kick occured when the prgram started or when I turned on the robot but still canceled out the arc problem
After that I tried experimenting with the frictions and “kick” timing and I experienced that all the wheels “kicked” in decreasing strength that corresponds to ports they where pluged in.
1)This made turn compensation more predictable and effective but still failed sometimes
2) couple this with gradual gain in speed with the moteors and the robot became much more accurate at reaching its intended destination
4) The best solution I found was to have the robot back up and alighn itself with the wall
I later found balancing the weight on the robot helped significantely but did not prevent the jolt ot kick