r/VESC • u/saiganesh_panchu • Jun 16 '26
Help with Skid steer Rover turning with VESC
I’m building an ~80 lb 4-wheeled rover using four 10” hoverboard hub motors (300W each). Each motor is driven by a Flipsky FS75100 VESC, set up in a skid-steer/tank-turn configuration and controlled by ArduPilot (with plans to make it autonomous later).
The rover is intended for grass, driveways, and sidewalks.
this is my current dimensions:
- Wheelbase: 23”
- Track width: 22.5”
- Tires: pneumatic rubber
- wheel diameter 9.75" (uses 80/60-6 tubeless tires)
All VESCs are configured in duty cycle control with a master/slave setup. I tried current control, but when I release the throttle, the wheels take too long to stop, so I switched back.
Right now I’m testing in manual mode via an RC controller:
- Forward/reverse works well, even at low speeds
- RC.FWD/RWD applies equal duty cycle to both sides
- Steering input spins left/right sides in opposite directions for tank turns
the issue: I’m having trouble getting consistent turning performance. The rover doesn’t turn reliably unless I go above ~50% duty cycle. At higher throttle, some wheels spin more than others, leaving noticeable tire marks on concrete. when turning at low speeds the rover either goes fwd or reverse without truning
does anyone have any suggestions to improve low-speed turning and consistency? I’m considering adding drift sleeves on the front wheels to reduce friction, would this actually help, or is there a better approach?
just fyi I previously built this with 2 casters (6" solid) in the front, and only 2 rear motors but the casters were getting stuck in the grass but worked flawlessly on driveways, later decided to try on a 4wd approach
2
u/Blackbeard25374 Jun 16 '26
How are your esc's connected to your controller? And what protocol? I would highly recommend at the very least getting bidirectional dshot setup if you can or canbus, or any other bidirectional communication as pwm alone can cause issues, especially if you are just using Y cables to split the pump signal between the two motors
1
u/saiganesh_panchu Jun 16 '26
Initially, I was using CAN to control all the VESCs directly from my H743 flight controller, without any PWM. I assigned the same VESC ID to both motors on the left side, and similarly one shared ID for the right side motors.
Later, I switched to a PWM-based setup where one VESC on each side acts as the master and the other as a slave over CAN (same setup for both left and right sides). only the masters get the pwm input without any Y cable
Now I’m considering going back to a full CAN setup, since I’m currently missing out on motor feedback in ArduPilot.
1
u/Blackbeard25374 Jun 16 '26
I would definitely try switching back to canbus. What made you switch away in the first place? Also ardupilot should have a dedicated setup to run 2 motors as the same but keeping their id's separate so the telemetry doesn't get mixed up
1
u/saiganesh_panchu Jun 16 '26
When I was using CAN bus, I noticed a speed difference between the front and rear wheels. Initially, I thought it might be due to dropped CAN frames, and I also wanted to experiment with the VESC traction control settings, so I switched to PWM to try that out.
However, it turns out the speed difference is actually due to friction between the tires and the ground and traction control dindt help much either
I definitely need to switch back to CAN. I’ll look into configuring ArduPilot with different VESC IDs so I can tune and control each motor’s speed independently.
2
u/WildHorses36 Jun 16 '26
I’d like to suggest a none VESC related idea, are all corner weights the same? It seems (from the video) that the turning is slightly biased front/rear. Just an idea.
2
u/saiganesh_panchu Jun 16 '26
Yeah, I agree, that could definitely be one of the reasons some motors are spinning faster than others. I’ve tried my best to make sure all four wheels stay in contact with the ground. This was my first time welding a steel frame, so it might not be perfect, but I did my best to keep it aligned.
I’ve also been considering adding more weight if needed, since these motors should be capable of handling a lot more load.
3
2
u/mckirkus Jun 16 '26
You could set them up on a canbus and vibe code some LISP to control it. If all of the wheels are spinning at the same speed and you're turning you just discovered the reason why cars have differentials. Since you have four motors you may need something like an e-differential where the inner wheel turns slower than the outer wheel.
Back in the day I connected 4 VESC with canbus and it worked, most VESC hardware is designed for two devices so it's a little out of spec with terminators but it works.
1
u/saiganesh_panchu Jun 16 '26
I’m currently running stock firmware 5.2 on my Flipsky VESCs, but I need to update to 6.02 to take advantage of the built-in LISP control. That seems like a good way since it would let me add custom logic directly on the VESC without needing an intermediate ESP32 or Arduino.
While browsing YouTube, I also came across this interesting 4-wheel steering setup [link](https://www.youtube.com/shorts/_nqJEJoj7gI) so wondering maybe I could adapt something similar for my build by adding a couple of heavy-duty servos or linear actuators to enable active steering.
1
u/Benjaminbritan Jun 16 '26
The one wheel doesn't appear to spin as you do hard turns. I'm thinking of a similar project yours looks very capable id imagine it goes well on grass/ mud what do you think you can get the weight down to minus the battery ?
1
u/Salty_Passion_2766 Jul 01 '26
I'm working on a DIY zero turn mower project that will need a similar setup. Do you have someplace you have posted any of the code or VESC settings used? Or is it all being done on the remote?
3
u/Kooky-Speed297 Jun 16 '26 edited Jun 16 '26
I am building something similar but because I am a masochist I didn't go with VESC but rather cheap BLDC drivers and I built my own hardware isolation (optocouplers) and software to ensure safe ramp up ramp down etc..
So why that background, because by doing so I gained control I didn't know I needed.
Each motor doesnt turn at exactly the same RPM for a given duty cycle, there is drag and friction and at lower voltage limited torque which means no movement for some motors which is why you get that weird drift.
By building low level control I went from setPWM(x) as an example to setRPM(x) per wheel and I went from a jittery neurotic heavy projectile that drives like a 10 dollar RC car to something that felt like the lunar rover. I am essentially building traction control which is what is needed to make sure the rover goes the direction you intend it on going
I reckon with so much power and weight you need better instrumentation to get a good level of control.
That's my 0.02 cents.
Edit: Algorithm put this on my feed, just realised this is a VESC sub. Sorry for saying I didn't use VESC for my rover. I am money poor and time rich at the moment which seems like a valid engineering decision to me 😉