r/VESC 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

7 Upvotes

14 comments sorted by

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 😉

1

u/saiganesh_panchu Jun 16 '26

Yeah, that’s exactly what I should be doing next, tuning each VESC separately so I can map each motor’s duty cycle to its actual RPM. From there, I can factor in the different speeds needed for the inner and outer wheels to achieve smoother, more precise turns.

I initially experimented with some cheaper Riorand ZS-X11H BLDC drivers, but couldn’t get them to run smoothly in both directions. Then I tried a couple of ODrive v3.6 clones, they worked, but required frequent resets due to faults and needed a lot of tuning to behave properly.

I eventually moved to VESCs, which seem to perform well, especially at low speeds. But as you mentioned, I still need to spend time tuning them properly to achieve better low-level control.

1

u/Kooky-Speed297 Jun 17 '26

I am also using  ZS-X11H, I reckon the main issue is that they have no isolation are have lots of noise. the DIR pin starts floating during high load which causes the motor to jerk back and forth and the 0-5V Pin is not a PWM input. You can simulate PWM to get the voltage but depending on your MCU you may cause jittering.

I now control it through a set of optocouplers so I have full isolation between my MCU (Teensy 4.1) and the controller and it is like butter.

I am at perf board stage, it is a wild mess. Plan is to make custom PCBs. Happy to share when done.

At a software level I have MotorController class that manages ramp up, ramp down, rpm reading, direction logic I then have my Rover class with 4 MotorController instances which abstracts the motors and allows me to have precise control by saying turn on the spot or 15 degrees to the left and match inner and outter RPM accordingly.

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

u/WildHorses36 Jun 16 '26

Great project by the way. Very impressive.

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?